Python:如何将图像转换为STRING并返回?

时间:2019-01-11 13:40:20

标签: python-3.x string image byte python-imaging-library

我有一个这样的图片加载到了PIL.Image中:

enter image description here

现在我想将其转换为 python字符串,并且它不应该是二进制的,我该怎么做? 因为当我尝试编码时,出现以下错误:

我的代码:

from PIL import Image

img = Image.open("testImage.jpeg")
string = img.tobytes()
string = string.decode("ascii")

输出:

Traceback (most recent call last):
  File "/Users/tomschimansky/Desktop/SenderMAIN.py", line 5, in <module>
    string = string.decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

在此情况下,我还想将字符串改回为图片

对我来说也不起作用的其他方法

  • 使用open("file","rb")从文件中直接读取图像,然后对其进行编码。
  • 使用codecs库对其进行
  • 编码。 (string = codecs.encode(string, "base64"
  • 使用base64库对其进行编码(能够将其转换为字符串,但是字符串看起来像这样:///////。(仅斜线))

感谢您的回答!

1 个答案:

答案 0 :(得分:3)

您可以将其转换为这样的字符串:

import base64

with open("image.png", "rb") as image:
    b64string = base64.b64encode(image.read())

这应该为您提供与在Terminal中运行此结果相同的结果:

base64 < image.png

您可以像这样将字符串转换回PIL图片:

from PIL import Image
import io

f = io.BytesIO(base64.b64decode(b64string))
pilimage = Image.open(f)

这应该等同于终端机中的以下内容:

base64 -D < "STRING" > recoveredimage.png

请注意,如果要通过LoRa发送此文件,则最好发送文件的PNG编码版本,就像我在这里一样,因为它已压缩并且会花费更少的时间。或者,您可以发送文件的扩展内存版本,但文件大小将增加近50%。 PNG文件为13kB。扩展后的内存版本将为100 * 60 * 3或18kB。