【问题标题】:save base64 image python保存base64图像python
【发布时间】: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 ...

标签: python image base


【解决方案1】:

之前不需要添加data:image/png;base64,,我尝试使用下面的代码,它工作正常。

import base64
data = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRFA6b1q Ci5/f2lt/9yu3 Y8v2cMpb1/DSJbz5i9R2NLwfLrWbw m T8I8////////SvMAbAAAABB0Uk5T////////////////////AOAjXRkAAACYSURBVHjaLI8JDgMgCAQ5BVG3//9t0XYTE2Y5BPq0IGpwtxtTP4G5IFNMnmEKuCopPKUN8VTNpEylNgmCxjZa2c1kafpHSvMkX6sWe7PTkwRX1dY7gdyMRHZdZ98CF6NZT2ecMVaL9tmzTtMYcwbP y3XeTgZkF5s1OSHwRzo1fkILgWC5R0X4BHYu7t/136wO71DbvwVYADUkQegpokSjwAAAABJRU5ErkJggg=='.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)

【讨论】:

    【解决方案2】:

    如果您将 data:image/png;base64, 附加到数据,则会出现错误。如果你有这个,你必须更换它。

    new_data = initial_data.replace('data:image/png;base64,', '')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      相关资源
      最近更新 更多