【问题标题】:pillow: image to bytes to image枕头:图像到字节到图像
【发布时间】:2021-12-31 19:08:45
【问题描述】:

我的函数接受字节以在内部将它们作为 PIL.Image 对象打开。将字节传递给该函数时,该函数按预期工作。但我想为它写几个测试。所以我需要生成图像,将它们转换为字节并将它们传递给我的函数,以便它可以再次将其转换回图像。

基本上我想做这样的事情:

from PIL import Image
from io import BytesIO

orig = Image.new(mode='RGBA', size=(240, 60))
image_bytes = orig.tobytes()
stream = BytesIO(image_bytes)
new = Image.open(stream)

但我不明白的是它不起作用,我得到了这个 Traceback:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Users/crane/PycharmProjects/my_project/venv/lib/python3.9/site-packages/PIL/Image.py", line 3030, in open
    raise UnidentifiedImageError(
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x104f86950>

【问题讨论】:

  • 我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…

标签: python-3.x python-imaging-library byte bytesio


【解决方案1】:

JPEG 或 PNG 文件是图像的压缩表示,包括其尺寸、色彩空间以及其他元数据,例如拍摄日期、镜头、相机和 GPS 坐标。压缩的高度、宽度和细节允许程序解包、解压缩、理解和显示图像。

当你这样做时:

image_bytes = orig.tobytes()

您的变量image_bytes 获取左上角像素,然后是第二个像素和第三个像素,依此类推。除了像素,它没有大小、色彩空间或其他任何内容。

如果你创建一个单像素的红色图像,你可以看到这个:

im = Image.new('RGB', (1,1), 'red')

print(im.tobytes())

结果只有 3 个 RGB 字节,没有标题。

 b'\xff\x00\x00'

这就是错误消息告诉您的内容 - Image.open() 无法识别图像的类型或大小 - 因为它不在您的变量中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多