Streamlit铅笔素描应用:如何实现浏览器端正常下载输出图片?
在Streamlit中实现浏览器端下载素描图片的方法
你原来的代码是把图片保存在运行Streamlit的本地/服务器环境里,用户浏览器无法直接获取,所以需要调整成让浏览器触发下载的逻辑,下面是两种可行的方法:
方法1:使用Streamlit官方的st.download_button(推荐)
这个组件是Streamlit专门为浏览器下载设计的,只需将图片转换成字节流格式即可:
import streamlit as st import numpy as np from PIL import Image import cv2 from io import BytesIO # (这里省略你生成final_sketch的代码) # 替换原来的下载按钮逻辑 buffer = BytesIO() im_pil = Image.fromarray(final_sketch) im_pil.save(buffer, format="JPEG") buffer.seek(0) st.download_button( label="下载素描图片", data=buffer, file_name="Pencil Sketch.jpeg", mime="image/jpeg" )
原理:把图片写入BytesIO内存缓冲区,直接将缓冲区的数据传递给st.download_button,点击按钮时浏览器会直接触发文件下载,无需保存到本地服务器。
方法2:生成HTML下载链接(自定义样式用)
如果需要自定义下载按钮的样式,可以用HTML的a标签配合base64编码实现:
import streamlit as st import numpy as np from PIL import Image import cv2 import base64 from io import BytesIO # (省略生成final_sketch的代码) im_pil = Image.fromarray(final_sketch) buffer = BytesIO() im_pil.save(buffer, format="JPEG") img_str = base64.b64encode(buffer.getvalue()).decode() # 渲染HTML下载链接 download_link = f""" <a href="data:image/jpeg;base64,{img_str}" download="Pencil Sketch.jpeg"> <button style="padding: 8px 16px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer;"> 下载素描图片 </button> </a> """ st.markdown(download_link, unsafe_allow_html=True)
原理:将图片转换成base64编码的字符串,嵌入到HTML的data URI中,点击链接时浏览器会识别并下载该图片文件。
内容的提问来源于stack exchange,提问作者Jerry Vfc
相关产品推荐
相关产品推荐

