如何从PyPNG的阅读器中读取itertools.imap对象

时间:2012-11-21 01:57:58

标签: python pypng

我正在使用PyPNG包读取一个简单的png文件 返回的像素数据是itertools.imap对象 我如何阅读这些数据。

import png, array  
reader = png.Reader(filename='image.png')  
w, h, pixels, metadata = reader.read()  

(877, 615, <itertools.imap object at 0x2a956a5b50>, {'bitdepth': 8, 'interlace': 0, 'planes': 3, 'greyscale': False, 'alpha': False, 'gamma': 0.45455, 'size': (877, 615)})

像素是这个itertools.imap对象,我假设它包含像素信息。

由于

此致

2 个答案:

答案 0 :(得分:4)

itertools.imap返回一个可迭代的。您应该可以迭代它,就像迭代任何其他列表一样。

当然,一个关键的区别是,因为它是一个迭代器,所以你只能迭代它一次。你也无法索引它

编辑(根据OP的要求):

如何迭代列表

假设您有一个名为L的列表,L如下所示:

L = ['a', 'b', 'c', 'd']

然后,L的元素及其各自的索引是:

+-------+---------+
| index | element |
+-------+---------+
|   0   |   'a'   |
+-------+---------+
|   1   |   'b'   |
+-------+---------+
|   2   |   'c'   |
+-------+---------+
|   3   |   'd'   |
+-------+---------+

请注意,因为python具有从零开始的索引,所以没有索引4,即使L中有四个项目。

现在,如果您希望L中的索引为3的项目,则执行L[3]。如果您希望L中的索引为2的项目,则执行L[s],依此类推。

迭代L(假设您要打印出值):

for elem in L:
    print elem

另一种方式:

for i in range(len(L)): # lookup range() and len()
    print L[i]

希望这有帮助

答案 1 :(得分:1)

最简单的(对于大图像不一定有效)是使用内置list函数将迭代器转换为列表:

pixelsAsList = list(pixels)
print pixelsAsList[0] # the first row
print pixelsAsList[0][0] # The Red channel from the first pixel on the first row.