python - Base64 到二进制转换的问题

标签 python image python-3.x base64

我有一个 base64 字符串,想使用 Python 3 将其作为 JPEG 写入文件。

file = request.json['file'] 
prefix = 'data:' + file['filetype'] + ';base64,' 
full_base64 = prefix + file['base64']
# full_base64 = data:image/jpeg;base64,/9j/4AAQSkZJ....
# base 64 verified with http://codebeautify.org/base64-to-image-converter

file_data = b64decode(full_base64)

with open('uploads/' + str(uuid.uuid4()) + '.jpeg', 'wb') as file:
    file.write(file_data)

但是如果我尝试使用图像查看器打开文件,则会收到此错误:

Error interpreting JPEG image file (Not a JPEG file: starts with 0x75 0xab)

base64 字符串似乎是正确的(我使用 http://codebeautify.org/base64-to-image-converter 验证了它),因此问题必须与 b64encode 或写入文件有关。

谢谢

最佳答案

如果您想要创建可供图像查看器读取的有效 JPEG 文件,则不应在该文件前面添加数据 URI。不过,您仍然需要解码 Base64 编码的图像数据。

with open('uploads/' + str(uuid.uuid4()) + '.jpeg', 'wb') as f:
    f.write(b64decode(file['base64']))

这将生成可由标准图像查看器打开的 JPEG 文件。

另外,请小心使用 as file 作为变量名 - 它会隐藏内置 file

如果由于某种原因您想要创建包含数据 URI 的文件,例如轻松插入 HTML 或 CSS 文件,那么您不需要解码传入的 JPEG 数据 - 它已经经过 Base64 编码:

image = request.json['file'] 
prefix = 'data:' + image['filetype'] + ';base64,' 
data_URI = prefix + image['base64']
# data_URI = data:image/jpeg;base64,/9j/4AAQSkZJ....

with open('uploads/' + str(uuid.uuid4()) + '.jpeg', 'wb') as f:
    f.write(data_URI)

这只是将数据 URI 前缀添加到已进行 Base64 编码的数据之前,并将其写入文件。

关于python - Base64 到二进制转换的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985112/

相关文章:

python - 在Pygame中沿光标方向绘制无限长度的线

html - 如何在 css 中保持背景图像的纵横比

html - 填充是链接的一部分

python - 替换列表列表中的字符串

python - 如何使用正则表达式查找匹配词?

python - 使用 Python Selenium 保存网页

python - 使用 python 将数据附加到 JSON 文件

python - 使用python在一行中的一组字符之前添加一个新行

c++ - RGB 到 LAB 并返回错误

python - 如何在 Gtk TextView 中添加新行?