PIL的putdata需要什么格式的数据?
我把图像的像素存储在一个整数的多进程数组里,这样可以方便地通过索引来访问。
self.data[x*height + y]
这样做是为了方便与进程间通信(IPC)。
我想用PIL库的putdata()方法把像素保存到文件里,这样比用putpixel()或者直接索引要快。但是我搞不清楚putdata()需要什么格式的图像数据。
我以为用同样的索引方式可以直接用在putdata()上。
def write(self):
im = Image.new("RGB", (self.width, self.height))
imagedata = [self.intToRGB(self.data[i*self.height + j])
for i in range(self.width)
for j in range(self.height)]
im.putdata(imagedata)
im.save(self.filename, "PNG")
self.intToRGB()这个方法返回一个包含红、绿、蓝值的元组。
但上面的代码运行后,图像却变成了-90度的旋转,并且出现了很多重复的部分。
如果我用putpixel()而不是putdata(),像这样:
pic = im.load()
for i in range(self.width):
offset = i * self.height
for j in range(self.height):
pic[i, j] = imagedata[i * self.height + j]
结果就变成了
1 个回答
4
我觉得我在你第一行代码里看到了问题:
self.data[x*height + y]
图像数据通常是以另一种方式组织的:
self.data[y*width + x]