解释图像的字节数组

Interpret byte array of an image

本文关键字:字节数 数组 字节 图像 解释      更新时间:2023-10-16

图像的字节数组中存储了什么?我正在做一个项目,需要解释存储在图像字节数组中的内容。我们如何解释字节数组的元素?

注意:以下是python中生成字节数组的代码

from array import array
f = open("temp.jpg", "rb")
bytes = bytearray(f.read())

你已经用python-imaging-library标记了它,但你没有在你的问题中提到它,你也没有使用它。

我强烈怀疑你真的使用它。您对构成 JFIF 标头、压缩图像数据、EXIF 段等的字节数组不感兴趣;您需要一个像素值数组。

因此,首先您必须安装 Python 映像库。现代版本名为 Pillow,文档有完整的安装说明,但通常只是pip install pillow .

现在,您可以在脚本中使用它:

>>> from PIL import Image
>>> img = Image.open("temp.jpg")
>>> img.mode
'RGB'
>>> img.getpixel((0, 0))
(3, 148, 231)

Image对象已经有点像数组了。mode让我知道这是一个 8 位 RGB 图像,因此每个像素将有 3 个值 - 从 0 到 255 的红色、绿色和蓝色强度。getpixel((0, 0))向我返回左上角像素的红色、绿色和蓝色值。

如果你真的想要一个平面数组,你也可以这样做:

>>> img.getdata()[0]
(3, 148, 231)

或者,如果您想要一个扁平的字节数组(交替的红-蓝-绿-红-蓝-绿)而不是元组:

>>> img.getbytes()[0]
3