4

我有一个指向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调用?

4

1 回答 1

4

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

from cStringIO import StringIO

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

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

于 2012-08-08T13:36:09.537 回答