Tom*_*Tom 10 string byte image python-imaging-library python-3.x
我有一个这样的图像加载到一个PIL.Image:

现在我想把它变成一个python string,它不应该是二进制的,我该怎么做?因为当我尝试编码时,出现以下错误:
我的代码:
from PIL import Image
img = Image.open("testImage.jpeg")
string = img.tobytes()
string = string.decode("ascii")
Run Code Online (Sandbox Code Playgroud)
输出:
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)
Run Code Online (Sandbox Code Playgroud)
当这有效时,我还想将字符串重新转换为图像。
其它的方法是还没有借机d对我来说:
open("file","rb"),然后对其进行编码。codecs库对其进行编码。( string = codecs.encode(string, "base64"))base64库对其进行编码(能够将其转换为字符串,但字符串如下所示:///////.(仅斜线))感谢您的回答!
Mar*_*ell 11
您可以转换为这样的字符串:
import base64
with open("image.png", "rb") as image:
b64string = base64.b64encode(image.read())
Run Code Online (Sandbox Code Playgroud)
这应该给你相同的结果,就像你在终端中运行它一样:
base64 < image.png
Run Code Online (Sandbox Code Playgroud)
您可以将该字符串转换回 PIL 图像,如下所示:
from PIL import Image
import io
f = io.BytesIO(base64.b64decode(b64string))
pilimage = Image.open(f)
Run Code Online (Sandbox Code Playgroud)
这应该相当于终端中的以下内容:
base64 -D < "STRING" > recoveredimage.png
Run Code Online (Sandbox Code Playgroud)
请注意,如果您通过 LoRa 发送此文件,最好像我在这里一样发送文件的 PNG 编码版本,因为它是压缩的,并且花费的时间更少。或者,您可以发送文件的扩展内存版本,但这会大近 50%。PNG 文件为 13kB。扩展的内存版本将为 100*60*3,或 18kB。