質問

PIL を使用して画像を生成しました。メモリ内の文字列に保存するにはどうすればよいですか? Image.save()メソッドにはファイルが必要です。

このような画像をいくつか辞書に保存したい。

他のヒント

Python3の場合、BytesIOを使用する必要があります:

from io import BytesIO
from PIL import Image, ImageDraw

image = Image.new("RGB", (300, 50))
draw = ImageDraw.Draw(image)
draw.text((0, 0), "This text is drawn on image")

byte_io = BytesIO()

image.save(byte_io, 'PNG')

詳細: http://fadeit.dk/blog / post / python3-flask-pil-in-memory-image

sthの解決策はうまくいきませんでした
なぜなら...

  

Imaging / PIL / Image.pyc行1423->   raise KeyError(ext)#不明   拡張機能

StringIOの場合には存在しないfilenameの拡張子からフォーマットを検出しようとしました

パラメータでフォーマットを自分で設定することで、フォーマット検出をバイパスできます

import StringIO
output = StringIO.StringIO()
format = 'PNG' # or 'JPEG' or whatever you want
image.save(output, format)
contents = output.getvalue()
output.close()

save()はファイル形式のオブジェクトとパスを取得できるため、StringIOのようなメモリ内バッファを使用できます。

buf= StringIO.StringIO()
im.save(buf, format= 'JPEG')
jpeg= buf.getvalue()

最新版(2017年中頃のPython 3.5およびPillow 4.0):

StringIOは、以前のように機能しなくなったようです。 BytesIOクラスは、これを処理する適切な方法です。 Pillowのsave関数は、文字列を最初の引数として予期しますが、驚くべきことにStringIOはそのように見えません。以下は古いStringIOソリューションに似ていますが、代わりにBytesIOがあります。

from io import BytesIO
from PIL import Image

image = Image.open("a_file.png")
faux_file = BytesIO()
image.save(faux_file, 'png')

「ディクショナリにそのような画像をいくつか保存したい」と言うとき、これがインメモリ構造であるかどうかは明確ではありません。

メモリ内の画像を柔らかくするためにこれを行う必要はありません。辞書に image オブジェクトを保持するだけです。

辞書をファイルに書き込む場合は、 im.tostring()メソッドと Image.fromstring()関数をご覧ください。

http://effbot.org/imagingbook/image.htm

  

im.tostring()=>文字列

     

ピクセルを含む文字列を返します   標準の「raw」を使用したデータ   エンコーダ。

     

Image.fromstring(mode、size、data)=>   画像

     

ピクセルから画像メモリを作成します   標準を使用した文字列のデータ   " raw"デコーダ。

"フォーマット" (.jpeg、.pngなど)は、ファイルを交換するときにディスク上でのみ重要です。ファイルを交換していない場合、形式は関係ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top