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

使用Streamlit的st.image显示图片时出现异常错误

Streamlit中st.image显示爬取图片异常的解决方法

你的代码里存在冗余的base64解码操作(未实际使用),核心问题大概率是请求未携带必要的请求头,导致Unsplash返回的内容在Streamlit中解析异常,另外也可以通过简化图片传递方式来避免潜在兼容问题。

修正后的代码

import requests
from PIL import Image
import streamlit as st
from io import BytesIO

def new_img(txt):
    # 添加User-Agent模拟浏览器请求,避免被拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    url = f"https://source.unsplash.com/random{txt}"
    response = requests.get(url, headers=headers)
    
    # 先验证请求是否成功
    if response.status_code != 200:
        st.error(f"图片请求失败,状态码:{response.status_code}")
        return
    
    # 两种可行的显示方式选其一即可
    # 方式1:直接传入图片二进制数据(推荐,更简洁)
    st.image(response.content)
    
    # 方式2:通过PIL Image对象显示(适合需要先处理图片的场景)
    # aux_im = Image.open(BytesIO(response.content))
    # st.image(aux_im)

关键修复点

  • 添加请求头:Unsplash的部分接口会拦截无标识的爬虫请求,模拟浏览器的User-Agent可以避免返回异常内容;
  • 增加状态校验:通过状态码判断请求是否成功,能快速排查网络或接口问题;
  • 简化传递逻辑:直接用response.content传递二进制数据给st.image,减少PIL转换环节的潜在兼容问题;
  • 清理冗余代码:移除了未使用的base64、matplotlib导入,让代码更简洁。

内容的提问来源于stack exchange,提问作者Jesmine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:28