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

时间:2015-01-07 18:43:54

标签: python python-imaging-library

我在PIL中打开了一个图像:

from PIL import Image

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

我需要访问此文件的原始内容。如何获取整个图片数据,就好像我会完成open(...).read()

4 个答案:

答案 0 :(得分:12)

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

  

需要再次保存img对象;把它写给另一个BytesIO   对象:

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

然后使用.getvalue()方法获取书面数据:

hex_data = output.getvalue()

答案 1 :(得分:6)

如果您想获得图像的实际字节,请使用i.tobytes()。这与Pillow一致,我不确定它是否在原始PIL模块中,而是来自应该是的文档。

答案 2 :(得分:2)

PIL使用延迟打开机制,只在需要时才读取文件内容。 如果这样做,它可能会将文件引用保留在某个内部(私有)属性中。

即使这个属性是可访问的,它肯定不会作为官方PIL API的一部分公开 - 它肯定不会以这种方式使用。

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

如果您使用原始文件内容,则可能会使用某些内容处理图像 其他模块,或存储它,或以不可知的形式迭代数据 对于实际的图像内容 - 你不能只用普通的"打开"来打开文件?

答案 3 :(得分:1)

在PIL中:

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

doc

中所述

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