从C库提供的内存流中创建PIL映像

时间:2012-08-08 13:34:04

标签: python

我有一个指向c库提供的png数据的char指针。 如何在内存中从这些数据创建python中的图像。 c函数如下所示:

char *getImage(int *imgSize);

在Python中,我得到了char *如下:

imSize = c_int()
img = c_char_p()
img = c_char_p(my_c_api.getImage(byref(imSize)))

char*返回到img变量中,并在imSize变量中返回以字节为单位的图像大小。

执行以下python脚本时:

im = Image.frombuffer("RGBA", (400,400),  img.value, 'raw', "RGBA", 0, 1)

我收到ValueError: buffer is not large enough错误。 我怀疑frombuffer调用中的img变量。 我如何处理img变量,将图像数据正确传递给frombuffer调用?

1 个答案:

答案 0 :(得分:4)

您需要将数据放在StringIO实例中并让PIL解析该数据。

from cStringIO import StringIO

imgfile = StringIO(img.value)
im = Image.open(imgfile)

.frombuffer假定原始图像数据,而不是PNG编码数据。 StringIO对象提供了一个类似文件的对象来包装您的数据,因此PIL可以使用它。