You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:54:23