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

我有一个指向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:缓冲区不够大错误.
我怀疑frombuffer调用中的img变量.
我如何处理img变量,将图像数据正确传递给frombuffer调用?

最佳答案
您需要将数据放在StringIO实例中,让PIL解析数据.

from cStringIO import StringIO

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

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

转载注明原文:python – 从C库提供的内存流中创建PIL映像 - 代码日志