KineticJS toDataURL()在Python中给出了不正确的填充错误
我有一个从KineticJS toDataURL()获取的base64字符串。它是一个有效的base64字符串。这把小提琴表明它是: 我的问题:我将这个数据URI发送到我的服务器,使用python进行解码,并保存到服务器上。但是,我得到了一个填充错误。这是我的密码:KineticJS toDataURL()在Python中给出了不正确的填充错误,python,kineticjs,decoding,Python,Kineticjs,Decoding,我有一个从KineticJS toDataURL()获取的base64字符串。它是一个有效的base64字符串。这把小提琴表明它是: 我的问题:我将这个数据URI发送到我的服务器,使用python进行解码,并保存到服务器上。但是,我得到了一个填充错误。这是我的密码: def base64_to_file(self, image_data, image_name): extension = re.search('data\:image\/(\w+)\;', image_data)
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,只是一张破碎的图像有什么帮助?非常感谢您的帮助。我已经在这件事上花了太多时间了
重新创建的步骤(可能很迂腐,但我会尽力帮助)
- 从JSFIDLE获取base64字符串
- 将其保存到文本文件中
- 用python打开文件,读入数据,保存到变量
- 将函数中的“/path/to/my/image”更改为计算机上的任意位置
- 将编码的文本变量传递到具有名称的函数中
- 查看输出
再说一次,任何帮助都会很棒。谢谢。如果您需要添加填充,则字符串错误。确保正确解析数据URI;
数据:image/png;base64,
部分是关于编码值的元数据,只有逗号后的部分是实际的base64值
实际数据部分的长度为223548个字符:
>>> len(image_data)
223548
>>> import hashlib
>>> hashlib.md5(image_data).hexdigest()
'03918c3508fef1286af8784dc65f23ff'
如果您的URI仍然包含数据:
前缀,请将其解析出来:
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 还有别的问题;我不能重现你的错误。JSFiddle中的数据直接解码为base 64,无需添加额外的填充,并解码为有效的PNG图像。检查
image\u数据
字符串是否未被截断<代码>镜头(图像数据)=223548对我来说<代码>导入hashlib;hashlib.md5(image_data).hexdigest()=“03918c3508fef1286af8784dc65f23ff”@MartijnPieters非常感谢!我检查了长度,得到了223573,我觉得非常奇怪。然后我注意到数据:image/png;base64,base64图像数据中的子字符串。我不知道我应该移除它,一旦我移除,它立即开始工作。如果你想写一个关于名誉的答案,那很好,否则我可以自己回答;如果你觉得我应得赏金,也别忘了给我赏金!:-)