从 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位像素,黑白,每字节存储一个像素)
我在 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位像素,黑白,每字节存储一个像素)