如何使用Pillow将Windows剪贴板BMP图像转PNG且无需保存重载
无需保存再加载,直接将剪贴板获取的BMP格式图像转为PNG格式
可以通过内存字节流(io.BytesIO)完成格式转换,完全跳过磁盘读写步骤,直接将PIL.BmpImagePlugin.DibImageFile转为PIL.PngImagePlugin.PngImageFile。
修改后的代码:
from PIL import ImageGrab, Image import io # 获取剪贴板图像 img1 = ImageGrab.grabclipboard() print("Image Type1:", type(img1)) # 用内存字节流完成格式转换 with io.BytesIO() as buffer: # 将图像以PNG格式写入内存缓冲区 img1.save(buffer, format='PNG') # 将缓冲区指针移到起始位置 buffer.seek(0) # 从内存中读取PNG格式图像 img2 = Image.open(buffer) print("Image Type2:", type(img2))
输出结果:
Image Type1: <class 'PIL.BmpImagePlugin.DibImageFile'> Image Type2: <class 'PIL.PngImagePlugin.PngImageFile'>
原理说明:
io.BytesIO创建了内存中的字节缓冲区,替代磁盘文件完成数据中转- 调用
save方法将图像以PNG格式写入缓冲区,此时缓冲区存储的是标准PNG格式数据 seek(0)将缓冲区的读写指针移至开头,确保Image.open能读取完整的PNG数据- 通过
Image.open读取缓冲区内容,直接得到PNG格式的图像对象
内容的提问来源于stack exchange,提问作者ScottC
相关产品推荐
相关产品推荐

