【发布时间】:2016-03-11 01:24:46
【问题描述】:
我正在尝试使用 Base64 编码的 python 保存图像。这里的字符串太大,无法发布,但这里是图片
当被 python 接收到时,最后 2 个字符是 == 虽然字符串没有格式化所以我这样做
import base64
data = "data:image/png;base64," + photo_base64.replace(" ", "+")
然后我这样做
imgdata = base64.b64decode(data)
filename = 'some_image.jpg' # I assume you have a way of picking unique filenames
with open(filename, 'wb') as f:
f.write(imgdata)
但这会导致这个错误
Traceback (most recent call last):
File "/var/www/cgi-bin/save_info.py", line 83, in <module>
imgdata = base64.b64decode(data)
File "/usr/lib64/python2.7/base64.py", line 76, in b64decode
raise TypeError(msg)
TypeError: Incorrect padding
添加data:image/png;base64, 并将spaces 替换为+ 后,我还打印了字符串的长度,它的长度为34354,我尝试了一堆不同的图像,但都是当我尝试打开保存的文件时,其中的一个说文件已损坏。
发生了什么,为什么文件损坏了?
谢谢
编辑
这是一些同样失败的 base64
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRFA6b1q Ci5/f2lt/9yu3 Y8v2cMpb1/DSJbz5i9R2NLwfLrWbw m T8I8////////SvMAbAAAABB0Uk5T////////////////////AOAjXRkAAACYSURBVHjaLI8JDgMgCAQ5BVG3//9t0XYTE2Y5BPq0IGpwtxtTP4G5IFNMnmEKuCopPKUN8VTNpEylNgmCxjZa2c1kafpHSvMkX6sWe7PTkwRX1dY7gdyMRHZdZ98CF6NZT2ecMVaL9tmzTtMYcwbP y3XeTgZkF5s1OSHwRzo1fkILgWC5R0X4BHYu7t/136wO71DbvwVYADUkQegpokSjwAAAABJRU5ErkJggg==
这是我在 python 脚本中从 POST 请求中收到的内容
注意我没有用 + 替换空格
【问题讨论】:
-
你能添加一个你收到的base64编码的小样本吗?使用非常小的图像(如网站图标)。 AFAIK base64 编码图像中没有空格。
-
那么你为什么使用
"data:image/png;base64," + photo_base64.replace(" ", "+")而不仅仅是imgdata = base64.b64decode(photo_base64)? -
@KevinGuan 因为当我将发送发送到 python 脚本时,+ 被空格替换,所以我只是把 + 放回去,Ali 即将发布一些数据
-
@AliNikneshan 发布了一些数据
-
您期待什么? Base64 字符串不能包含空格,而您的示例字符串包含空格。如果我用 '+' 替换它,我会收到一些 PNG
In [13]: s.replace(' ', '+').decode('base64') Out[13]: '\x89PNG\r\n\x1a\n ...