从 PIL.Image 获取二进制图像数据?

Get binary image data from PIL.Image?

我在 PIL 中打开了一张图片,如下所示:

from PIL import Image

i = Image.open("image.jpg")

我需要访问此文件的原始内容。怎么才能得到整个图片数据,好像我已经做了open(...).read()?

PIL采用惰性打开机制,只在需要时才读取文件内容。 为此,它可能会在某些内部(私有)属性中保留文件引用。

即使此属性可以访问,它也肯定不会作为官方 PIL 的一部分公开 API - 并且它当然不应该以这种方式使用。

一旦读取数据,文件内容就会被解码,并作为像素值保存在内存中(这通常是处理图像时所需要的)。该库当然不会将未解码的文件数据保存在内存中的数据结构中,因为它没有意义。

如果您想要原始文件内容,您可能会使用其他模块处理图像,或者存储它,或者以与实际图像内容无关的形式迭代数据 - 难道你不能用常规 "open"?

打开文件

如果你想获取图像的实际字节,只需使用 i.tobytes(). This is with Pillow,我不确定它是否在原始 PIL 模块中,但从文档中应该是。

你可以看到这个答案python Image PIL to binary Hex

The img object needs to be saved again; write it to another BytesIO object:

output = io.BytesIO()
img.save(output, format='JPEG')

then get the written data with the .getvalue() method:

hex_data = output.getvalue()

在 PIL 中:

Image.open(path).convert('1')

doc

所述

1模式用于(1位像素,黑白,每字节存储一个像素)