gpt4 book ai didi

python - KineticJS toDataURL() 在 Python 中给出不正确的填充错误

转载 作者:行者123 更新时间:2023-11-30 23:32:04 24 4
gpt4 key购买 nike

我有一个从 KineticJS toDataURL() 获取的 base64 字符串。这是一个有效的 Base64 字符串。这个 fiddle 显示它是:http://jsfiddle.net/FakRe/

我的问题:我将此 dataURI 发送到我的服务器,使用 python 进行解码,然后保存在服务器上。但是,我收到填充错误。这是我的代码:

def base64_to_file(self, image_data, image_name):

extension = re.search('data\:image\/(\w+)\;', image_data)
if extension:
ext = extension.group(1)
image_name = '{0}.{1}'.format(image_name, ext)
else:
# it's not in a format we understand
return None

image_data = image_data + '=' #fix incorrect padding
image_path = os.path.join('/my/image/path/', image_name)
image_file = open(image_path, 'w+')
image_file.write(image_data.decode('base64'))
image_file.close()
return image_file

我可以通过在函数顶部执行此操作来解决此填充错误:

image_data = image_data + '=' #fixes incorrect padding

添加任意填充后,它成功解码并写入文件系统。但是,每当我尝试查看图像时,它都不会渲染,并显示“损坏的图像”图标。没有 404,只是一个损坏的图像。 有什么好处?任何帮助将不胜感激。我已经在这上面花费了太多时间。

重新创建的步骤(可能有些迂腐,但我会尽力提供帮助)

  • 从 JSFiddle 获取 base64 字符串
  • 将其保存到文本文件
  • 用python打开文件,读入数据,保存到变量
  • 将函数中的“/path/to/my/image”更改为计算机上的任意位置
  • 将编码的文本变量传递到带有名称的函数中
  • 查看输出

再说一遍,任何帮助都会很棒。谢谢。

最佳答案

如果您需要添加填充,则字符串错误。 确保您正确解析数据 URI; data:image/png;base64, 部分是有关编码值的元数据,只有逗号后面的部分才是实际的 Base64 值。

实际数据部分长度为 223548 个字符:

>>> len(image_data)
223548
>>> import hashlib
>>> hashlib.md5(image_data).hexdigest()
'03918c3508fef1286af8784dc65f23ff'

如果您的 URI 仍包含 data: 前缀,请解析该前缀:

from urllib import unquote

if image_data.startswith('data:'):
params, data = image_data.split(',', 1)
params = params[5:] or 'text/plain;charset=US-ASCII'
params = params.split(';')
if not '=' in params[0] and '/' in params[0]:
mimetype = params.pop(0)
else:
mimetype = 'text/plain'
if 'base64' in params:
# handle base64 parameters first
data = data.decode('base64')
for param in params:
if param.startswith('charset='):
# handle characterset parameter
data = unquote(data).decode(param.split('=', 1)[-1])

这可以让您就图像 URL 使用什么扩展名做出一些更明智的决定,例如,您现在也解析了 mimetype。

关于python - KineticJS toDataURL() 在 Python 中给出不正确的填充错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com