尝试从 Base64 转换图像时出现“无效起始字节”错误

问题描述 投票:0回答:1

生成需要编码和解码为 Base64 的图像时,出现错误:

r2 = base64.b64decode(r.encode("utf-8"), validate=True).decode("utf-8") UnicodeDecodeError: 'utf-8' 编解码器不能 解码位置 0 处的字节 0x89:无效起始字节

示例:

from PIL import Image
import base64
import io


if __name__ == "__main__":
    # Create an image with a blue background
    img = Image.new('RGB', (100, 100), color='blue')

    # Save the image to a bytes buffer
    buf = io.BytesIO()
    img.save(buf, format='PNG')
    buf.seek(0)

    r = str(base64.b64encode(buf.read()).decode('utf-8'))
    print(r)

    # This operation throws an error and this cannot be changed
    r2 = base64.b64decode(r.encode("utf-8"), validate=True).decode("utf-8")
    print(r2)
python lambda python-imaging-library
1个回答
0
投票

b64decode
正在工作。 它返回原始图像字节。
原始图像不是 utf-8 编码的字符串。
.decode("utf-8")
不是必需的,而是您
UnicodeDecodeError
的结果。
这个错误是有道理的。 如果您在将图像保存到其中后尝试
decode('utf-8')
您的
buf
也会发生这种情况。 它不是文本,而是二进制图像,因此无法解码为 Unicode。

# Create an image with a blue background
img = Image.new('RGB', (100, 100), color='blue')

# Save the image to a bytes buffer
buf = io.BytesIO()
img.save(buf, format='PNG')

raw_image = buf.getvalue()
b64_image = base64.b64encode(raw_image)
print("base64:", b64_image)

decoded_raw_image = base64.b64decode(b64_image, validate=True)
print("decoded:", decoded_raw_image)

assert decoded_raw_image == raw_image, "decoded image should match the original image"
© www.soinside.com 2019 - 2024. All rights reserved.