過去数時間私はイメージのBase64文字列を作成しようとしていましたが、動作しません。PILイメージをBase64でエンコードされた文字列として取得する方法
ship_color = (0,100,100,255)
img = Image.new("RGBA", (100,100))
for i in range(20):
for j in range(20):
img.putpixel((40 + i, 40 + j), ship_color)
img.save("tmp.png", format = "PNG")
im = open("tmp.png", "rb").read()
print(im)
base = base64.b64encode(im)
print(base)
私は再び文字列からイメージを作成しようとすると、私は例外を取得:Base64でのデコーディングのための
img2 = Image.frombytes("RGBA", (100, 100), base)
ValueError: not enough image data
その他のオンラインサービスもエラーを与えるので、Base64文字列自体はしていないようです正しい。
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00d\x00\x00\x00d\x08\x02\x00\x00\x00\xff\x80\x02\x03\x00\x00\x00lIDATx\x9c\xed\xd0\xd1\t\x800\x10\x05\xc1h\xad)+\xc5Z\xc3\x8a\x10"3\xff\xc7;v\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008\xc7\xb5my\xce\xf7\xb7k}\xf7GpoY=\x94X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x81X\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0S\x0fX\xb7\x02(\x90HP\xa2\x00\x00\x00\x00IEND\xaeB`\x82'
例Base64文字列:(オープン()(読み取り)から)
例えば画像列
b'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAbElEQVR4nO3Q0QmAMBAFwWitKSvFWsOKECIz/8c7dgwAAAAAAAAAAAAAADjHtW15zve3a333R3BvWT2UWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgVgAAAAAAAAAAAAAAPBTD1i3AiiQSFCiAAAAAElFTkSuQmCC'
で、メモリ・ファイルで使用して一時ファイルを作成せずにこれを達成することができますか –
@AlastairMcCormackは、画像をエンコードするために 'base64.b64decode(im)'を使っていると言っています。 – Robert
@ロベルト私の悪い、間違った方法^^まだb64encodeは同じ例外を与えます –