PIL的原始解码器如何工作?

时间:2013-01-22 07:58:01

标签: string python-imaging-library encoder

我正在尝试将.tiff转换为数组,以便我可以逐个像素地添加图像,并对它们执行其他几项操作。我正在使用numpy.fromstring()和im.tostring进行转换。

def image2array(im):
  newArr = numpy.fromstring(im.tostring(),numpy.uint16)
  newArr2 = numpy.reshape(newArr,im.size)
  return newArr2

根据文档,tostring使用标准的“原始”编码器返回包含像素数据的字符串。而fromstring使用标准的“原始”解码器从字符串中的像素数据创建图像内存。

代码可以工作,但我不太清楚原始图像编码器是如何工作的。数组是否产生了字符串数据,类似于可以解码为图像的位数据?或者它是实际的像素值?我正在尝试获取实际像素值,所以我应该使用im.getdata()?

2 个答案:

答案 0 :(得分:1)

通过numpy.array(pilIm)和PIL.Image.fromarray(numpyArray)可能有更简单的方法来实现你的想法: NumPy, PIL adding an image

如果你想加载压缩的tiff文件,请查看tifffile.py:http://code.google.com/p/pylibtiff/

编辑:numpy.array而不是numpy。 as array

答案 1 :(得分:0)

是。您应该使用getdata()。您可以直接使用它创建阵列。

This post给出了如何将numpy和PIL结合使用的一个很好的例子。