繁体   English   中英

如何使用带有 on_click 回调的 st.download_button 下载前处理数据?

[英]How to process data before downloading using st.download_button with on_click callback?

我有一个运行的应用程序,我的 model 给出结果np.ndarray并且我将结果显示为st.image(result_matrix) 我想添加一个功能,让我的用户能够下载此图像,但问题是我必须将其转换为PIL.Image并将buffer.getvalue()作为输入发送到此按钮。 我也可以这样做,但我的用户并不经常下载,为了节省计算能力和负载,我不会将每个结果PIL.Image

是否有任何功能可以让您在处理数据后按需下载数据?

我尝试执行以下操作,但给了我明显的错误,它不接受numpy数组:

import streamlit as st
from PIL import Image
import numpy as np
from io import BytesIO

st.session_state['result'] = some_numpy_RGB_array

def process_image():
    img = Image.fromarray(st.session_state['result'])
    buffer = BytesIO()
    img.save(buffer, format="jpeg")
    st.session_state['result'] = buffer.getvalue()

_ = st.download_button(label="Download",data=st.session_state['result'],file_name="image.jpeg",mime="image/jpeg",on_click=process_image)

我只知道这里给出的解决方法:

import streamlit as st


def generate_report(repfn):
    with open(repfn, 'w') as f:
        f.write('Report')
    st.write('done report generation')


if st.button('generate report'):
    repfn = 'report.pdf'
    generate_report(repfn)

    with open(repfn, "rb") as f:
        st.download_button(
            label="Download report",
            data=f,
            file_name=repfn)

这并不理想,因为用户必须单击两个按钮:一个用于生成(在您的情况下)图像,第二个用于实际下载它。 但我想总比没有好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM