簡體   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