我了解在Python中,可以使用PIL
或Image
之类的外部库来获取图像的所有像素的多种方法。有兴趣尝试我的二进制技能的人,我认为我会继续尝试使用文件中的二进制数据读取原始Python中的像素。这是我用作示例的图像:
从其他问题中收集到的信息是,在处理之前,我需要将字节转换为一大堆无符号整数。我使用struct.unpack
来做到这一点。到目前为止,这是我的程序:
import struct
with open('connect.jpg', 'rb') as fp:
data = fp.read()
print(struct.unpack("I"*int(len(data)/4), data))
这给了我一大堆疯狂的整数。我认为这些只是我必须转换的RGB整数,所以我做到了。这里有几个问题:
像素列表只有2019长,而我的图像是320x240。
像素颜色严重不足。我本来以为前几千个像素会接近rgb(0,0,0)
,但是我得到的是绿色,紫色,黄色,红色-一切。
作为参考,这是我用来将无符号整数转换为RGB元组的代码:
def rgb_int2tuple(rgbint):
return (rgbint // 256 // 256 % 256, rgbint // 256 % 256, rgbint % 256)
我觉得我在这里采用了完全错误的方法。我可能无法将数据读取为正确的格式,还是我的int-to-RGB函数弄乱了?