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エラーが発生します。呼び出しの img 変数が疑われfrombufferます。frombuffer画像データを呼び出しに正しく渡すには、img 変数をどうする必要がありますか?

4

1 に答える 1

4

データをStringIOインスタンスに配置し、PIL でそのデータを解析する必要があります。

from cStringIO import StringIO

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

.frombufferPNG でエンコードされたデータではなく、生の画像データを想定しています。このStringIOオブジェクトは、データをラップするためのファイルのようなオブジェクトを提供するため、PIL はそれを操作できます。

于 2012-08-08T13:36:09.537 に答える