python base64图片互转,解决base64字符串转PIL图片对象报错:binascii.Error: Incorrect padding问题
作者:Python咕噜
在Base64编码中,若字符串长度不是4的倍数,需在末尾添加等号作为填充,不符合此规则会导致在转换为图片时出现binascii.Error:Incorrectpadding错误,正确的填充确保编码后的字符串可以正确转换成图片,避免转换错误
base64保存成图片可能会出现: binascii.Error: Incorrect padding
原因:
在Base64编码中,字符串的长度应该是4的倍数,如果不是,则需要在末尾添加等号(‘=’)作为填充,以确保长度正确。
如果不是4的倍数,则在转化为图片过程中会出现 binascii.Error: Incorrect padding 的报错
base64保存成图片代码
import base64 import binascii import re def base64_format(base64_str): # 移除Base64字符串的前缀 base64_str = re.sub(r'data:image/.+?;base64,', '', base64_str) # 检查长度并添加必要的填充 4的倍数 if len(base64_str) % 4 != 0: num_padding = 4 - len(base64_str) % 4 base64_str += '=' * num_padding try: # 解码 image_data = base64.b64decode(base64_str) return image_data # 假设你只是想返回解码后的数据 except binascii.Error as e: print(f"Base64解码错误: {e}") return None def base64_to_images(base64_str, image_path): """ 将base64字符串解码为字节,并保存图片 :param base64_str: base64字符串 :param image_path: 保存图片路径 :return: """ image_data = base64_format(base64_str) png = open(image_path, 'wb+') png.write(image_data) png.close() base64_str = 'data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMqaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA0Qjg0NzAxNUQ3QjExRUZBNkM3QkI1RTczMUVCNTgzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA0Qjg0NzAwNUQ3QjExRUZBNkM3QkI1RTczMUVCNTgzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4N0U2RDIxNTVEN0ExMUVGQURDMjlGNkU0QzFDMDVEQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4N0U2RDIxNjVEN0ExMUVGQURDMjlGNkU0QzFDMDVEQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYI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' base64_to_images(base64_str, '1.png')
图片转base64
def images_to_base64(image_path): """ 将图片转成base64字节 :param image_path: 图片路径 :return: """ with open(image_path, 'rb') as f: image_data = f.read() base64_str = base64.b64encode(image_data) print(base64_str)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。