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

如何将PIL.Image转换为IOBase类实现无硬盘存储发送二维码?

解决方案

要实现不保存到硬盘直接发送二维码,你需要将PilImage对象转换为BytesIO流,再用InputFile包装后发送,具体步骤如下:

完整代码示例

import qrcode
from io import BytesIO
from aiogram.types import InputFile

# 生成二维码
qr_code_img = qrcode.make(message.text)

# 将二维码写入BytesIO内存流
byte_stream = BytesIO()
# 直接调用PilImage的save方法写入流,指定格式为PNG
qr_code_img.save(byte_stream, format="PNG")
# 将流指针移到起始位置,否则读取时会获取空内容
byte_stream.seek(0)

# 包装为InputFile对象,可指定文件名让用户收到的图片有合理命名
input_file = InputFile(path_or_bytesio=byte_stream, filename="qrcode.png")

# 发送二维码图片
await bot.send_photo(chat_id=message.from_user.id, photo=input_file)

关键说明

  • BytesIO是内存中的字节流,属于InputFile参数支持的IOBase类型,完全不需要写入硬盘即可传递图像数据。
  • 调用save时必须明确指定图像格式(如PNG),因为PIL向字节流保存时无法自动推断格式。
  • 写入流后必须执行seek(0):写入操作会把流的指针移到末尾,不重置指针的话,后续读取(发送)操作会获取空内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:35:14