我有一个指向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
调用?
答案 0 :(得分:4)
您需要将数据放在StringIO
实例中并让PIL解析该数据。
from cStringIO import StringIO
imgfile = StringIO(img.value)
im = Image.open(imgfile)
.frombuffer
假定原始图像数据,而不是PNG编码数据。 StringIO
对象提供了一个类似文件的对象来包装您的数据,因此PIL可以使用它。