python base64图片互转,解决base64字符串转PIL图片对象报错:binascii.Error: Incorrect padding问题

 更新时间:2024年09月14日 12:39:42   作者: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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python中单下划线_的常见用法总结

    python中单下划线_的常见用法总结

    这篇文章主要介绍了python中单下划线_的常见用法总结,其实很多(不是所有)关于下划线的使用都是一些约定俗成的惯例,而不是真正对python解释器有影响,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-07-07
  • OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现

    OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现

    这篇文章主要介绍了OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解基于python的图像Gabor变换及特征提取

    详解基于python的图像Gabor变换及特征提取

    这篇文章主要介绍了基于python的图像Gabor变换及特征提取,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • 使用 Python 获取 Linux 系统信息的代码

    使用 Python 获取 Linux 系统信息的代码

    在本文中,我们将会探索使用Python编程语言工具来检索Linux系统各种信息,需要的朋友可以参考下
    2014-07-07
  • shelve  用来持久化任意的Python对象实例代码

    shelve 用来持久化任意的Python对象实例代码

    这篇文章主要介绍了shelve 用来持久化任意的Python对象实例代码的相关资料,需要的朋友可以参考下
    2016-10-10
  • python 数字转换为日期的三种实现方法

    python 数字转换为日期的三种实现方法

    在Python中,我们经常需要处理日期和时间,本文主要介绍了python 数字转换为日期的三种实现方法,包含datetime模块,strftime方法及pandas库,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • python基于event实现线程间通信控制

    python基于event实现线程间通信控制

    这篇文章主要介绍了python基于event实现线程间通信控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • django项目用higcharts统计最近七天文章点击量

    django项目用higcharts统计最近七天文章点击量

    这篇文章主要介绍了django项目用higcharts统计最近七天文章点击量,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • pydev使用wxpython找不到路径的解决方法

    pydev使用wxpython找不到路径的解决方法

    pydev使用wx库开发的过程中,import时碰到wx可以识别,但是其它很多函数和变量上面全部是红叉,即无法识别
    2013-02-02
  • 关于python并发编程中的协程

    关于python并发编程中的协程

    协程是一种轻量级的并发方式,它是在用户空间中实现的,并不依赖于操作系统的调度,协程可以在同一个线程中实现并发,不需要进行上下文切换,因此执行效率非常高,需要的朋友可以参考下
    2023-04-04

最新评论