首页 > 解决方案 > Python:如何将图像转换为字符串并返回?

问题描述

我将这样的图像加载到PIL.Image

在此处输入图像描述

现在我想把它变成一个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)

当这可行时,我还想将字符串转回图像

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

感谢您的回答!

标签: python-3.xstringimagebytepython-imaging-library

解决方案


您可以像这样转换为字符串:

import base64

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

这应该会给您与在终端中运行相同的结果:

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。


推荐阅读