web-dev-qa-db-ja.com

jpeg文字列をPILイメージオブジェクトに変換する

アプリケーションのバックエンドから、jpegファイルであるはずのファイルのリストが渡されました。しかし、私の人生の間、それらをPILイメージオブジェクトに変換することはできませんでした。私が電話するとき

str(curimg)

私は戻ってきます:

<type 'str'>

。 open()、. read、io.BytesIO(img.read()を使用して何もしませんでしたが、文字列として表示され続けます。文字列を印刷すると、認識できない文字が表示されます。誰か知っていますかpythonこの文字列をjpegとして解釈し、.sizeとnp.arrayを呼び出すことができるピルイメージに変換する方法を教えてください。

10
mt88

StringIOオブジェクトをPILに渡して、その方法で開くことができるはずです。

すなわち:

from PIL import Image
import StringIO
tempBuff = StringIO.StringIO()
tempBuff.write(curimg)
tempBuff.seek(0) #need to jump back to the beginning before handing it off to PIL
Image.open(tempBuff)
12
Ian St.John

同じことですが、少し簡単です

from PIL import Image
import io
Image.open(io.BytesIO(image))

注意:

画像がウェブ上にある場合;最初にダウンロードする必要があります。

import requests
image = requests.get(image_url).content  #download image from web

そして、それをioモジュールに渡します。

io.BytesIO(image)

画像がHDにある場合; PILで直接開くことができます。

Image.open('image_file.jpg')  #image in your HD
18
Diego Suarez

私にとって、上記の解決策はどれもうまくいきませんでした。

私はついにこのように文字列を正しく読み取ることができました:

from PIL import Image
img = Image.frombytes('RGB', (640, 480), img_str, 'raw')

それをテストするには、次のようなことを行うことができます

image = Image.open("some.png")
print(image.mode, image.size) # OUT: 'RGB' (640, 480)
image = Image.frombytes('RGB', (640, 480), image.tobytes(), 'raw')
image.show()
1
VanDavv