2012-04-12 10 views
9

PIL Imageオブジェクトからpickleableファイルを作成して、それらのイメージを単一のpickleファイルとして保存し、PILを実行しているサーバなどの別のコンピュータにアップロードして、そこにunpickleすることができるようにするにはどうすればよいですか?Pickleable Image Object

答えて

16

あなたは、あなたがそれをpickle化することができ、データにImageオブジェクトを変換することができます

image = { 
    'pixels': im.tostring(), 
    'size': im.size, 
    'mode': im.mode, 
} 

とバック画像へ:

im = Image.fromstring(image['mode'], image['size'], image['pixels']) 

注:astexとしてが述べたように、あなたがしている場合(PILの代わりに推奨される)枕を使用すると、tobytes()のためにtostring()メソッドが非推奨になりました。同様にのfrombytes()についても同様です。

+1

'Image.tostring() 'は現在廃止されています。 'Image.tobytes()'のための '' Pillow'。後世のために、上記を変更する方が良いかもしれません(または少なくともメモを残すこと)。 – astex

9

使用ジェラルドの答えのわずかな変動キーワード引数

作成pickleableオブジェクト

image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode} 

または背面の画像に

image = dict(data=im.tostring(), size=im.size, mode=im.mode) 

化したりunpickle化したり

im = Image.fromstring(**image) 
+0

これは、アプリケーションに画像を保存する必要はないということですか?私はちょうど彼らがシリアル化する文字列を使用することができますし、私はイメージを使用したいときにアプリケーション内でそれをハードコード? – Ogen

+0

あなたは技術的に*できますが、実際のファイルとして保存する方がはるかに優れています...いずれの場合も、コードとともにバージョン管理することができますが、画像を画像として保存すると、あなたが保存したメディア。画像をコードとして保存している場合は、ソースファイルのサイズを人工的に膨らませ、表示や検索をより煩雑にし、その画像を表示したり変更したりする場合は、管理しにくいメディアにします。 – kungphu

関連する問題