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

Python实现WEBP转PNG后直接插入Excel(无需本地存储)

问题:无需本地存储直接将WEBP转PNG插入Excel?

抓取包含结构化信息和WEBP图片的HTML数据并保存到Excel工作表时,WEBP格式无法直接插入Excel,需要转换为PNG或JPG,但批量转换后保存到本地再插入的方式耗时较长。尝试直接插入转换后的二进制img_png失败,但下载WEBP转PNG后存本地再用openpyxl插入可行,现有代码如下:

url = "https://down-aka-tw.img.susercontent.com/tw-11134207-7qul7-lilu03jxchpw3d_tn.webp" 

response = requests.get(url)

img_data = response.content

img_png = Image.open(BytesIO(requests.get(url).content)).convert("RGB") #from PIL import Image as pImage

img_png.save("C:\\temp\\image.png")

img = oImage('C:\\temp\\image.png')  #from openpyxl.drawing.image import Image as oImage

wb = Workbook()
ws = wb.active

# insert images
ws.add_image(img, 'A1')

wb.save("C:\\temp\\export.xlsx")
wb.close()

请问是否有无需本地存储,将WEBP转PNG后直接插入Excel的方法?


解决方案

可以通过内存缓冲区BytesIO实现全程无本地存储的WEBP转PNG并插入Excel,核心思路是把转换后的图片数据保存在内存中,而非写入本地文件。修改后的代码如下:

import requests
from PIL import Image
from openpyxl import Workbook
from openpyxl.drawing.image import Image as oImage
from io import BytesIO

url = "https://down-aka-tw.img.susercontent.com/tw-11134207-7qul7-lilu03jxchpw3d_tn.webp"

# 下载WEBP图片并转换为RGB格式(PNG基础格式)
response = requests.get(url)
img_png = Image.open(BytesIO(response.content)).convert("RGB")

# 创建内存缓冲区,将转换后的图片写入缓冲区
img_buffer = BytesIO()
img_png.save(img_buffer, format="PNG")
img_buffer.seek(0)  # 重置缓冲区指针到起始位置,确保openpyxl能读取完整数据

# 直接从内存缓冲区创建openpyxl的Image对象
img = oImage(img_buffer)

wb = Workbook()
ws = wb.active

# 插入图片到指定单元格
ws.add_image(img, 'A1')

wb.save("C:\\temp\\export.xlsx")
wb.close()

关键说明:

  • 用BytesIO替代本地文件作为数据载体,避免了磁盘IO操作,大幅提升批量处理效率
  • 转换后的图片写入缓冲区后,必须调用seek(0)将指针移到开头,否则openpyxl读取时会从缓冲区末尾开始,无法获取有效图片数据
  • openpyxl的Image类支持接受类文件对象(如BytesIO)作为参数,因此可以直接读取内存中的图片数据

内容的提问来源于stack exchange,提问作者陳韋仲

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:05:20