Python 从C库提供的内存流创建PIL映像
我有一个指向由Python 从C库提供的内存流创建PIL映像,python,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脚
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变量。
要将图像数据正确地传递给
frombuffer
调用,我必须如何处理img变量 您需要将数据放在StringIO
实例中,并让PIL解析其中的数据
from cStringIO import StringIO
imgfile = StringIO(img.value)
im = Image.open(imgfile)
.frombuffer
采用原始图像数据,而非PNG编码数据。StringIO
对象提供了一个类似文件的对象来包装数据,因此PIL可以使用它。使用上述方法,我得到以下错误:raise IOError(“无法识别图像文件”)。图像缓冲区的长度为13984字节。当执行len(img.value)时,答案是8字节,看起来并不是所有13984字节都用StringIO(img.value)命令放在imgfile中,因此IOError(“无法识别图像文件”)请帮助,我需要从c api返回的数据缓冲区中创建python中的png图像。抱歉,我不知道你的c api是如何工作的;在将整个缓冲区传递到StringIO实例之前,首先将其作为字符串获取。此外,标识将使用文件中的第一组字节,最后缺少的字节我希望给出不同的错误(但我不确定)。