python中base64编码
创始人
2024-03-12 01:44:50

1. base64编码简介

用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。

Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。Base64是一种用64个字符来表示任意二进制数据的方法,原理很简单,首先,准备一个包含64个字符的数组['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/'] ,然后,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit,这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。

每组6位->6位二进制取值范围为:000000-111111(0-63)正好可以取到64个字符

所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

2. python中使用base64

python中直接使用内置包base64即可,base64.b64encode base64.b64decode 分别是编码和解码

import base64
if __name__ == "__main__":bytes_str = b"i love beijing"# 编码# b'aSBsb3ZlIGJlaWppbmc='base64_string = base64.b64encode(bytes_str)print(base64_string)# 解码# b'i love beijing'source_str = base64.b64decode(base64_string)print(source_str)

由于标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,所以又有一种url safe 的base64编码,其实就是把字符+/分别变成-_

bytes_str = b"i love tiananmen"
# 编码
base64_string = base64.urlsafe_b64encode(bytes_str)
print(base64_string)
# 解码
source_str = base64.urlsafe_b64decode(base64_string)
print(source_str)

注意:无论是哪种编码方式,输入到base64中的参数都是字节的形式,因此上方中参数byte_str前有个b

3. 应用

将图片(视频)编码成字符串
如下代码,将一张图片编码成字符串,后面我们可以将图片直接以字符串的形式保存到文件中,方便读取,因为有些情况下存取字符串会比直接保存图片方便,比如先把图片存放到数据库中

if __name__ == "__main__":import requestsfrom PIL import Imagefrom io import BytesIOimport base64response = requests.get('https://ts1.cn.mm.bing.net/th/id/R-C.fd4056c8c00979ab8561f8db8219c2ae?rik=JPk67EIYaKIS3A&riu=http%3a%2f%2fimg.mm4000.com%2ffile%2fa%2fa2%2f869bd2bd6a.jpg&ehk=2z%2bPuRHJOYtkm9ICs8fPs0EJbE96jJX2E8QyrVP5kyQ%3d&risl=&pid=ImgRaw&r=0')if response.status_code != 200:raise ValueError("request Error!")# 将请求结果存入io中, 使用PIL以io的方式打开图片img = BytesIO(response.content)pict = Image.open(img)# 改变图像大小,也可是其他操作pict = pict.resize((100, 100), Image.ANTIALIAS)# 将图片存入io中, PIL格式的图片变成byte格式img_buff = BytesIO()pict.save(img_buff, "jpeg")# 使用base64把byte对象编码成字符串img_str = base64.urlsafe_b64encode(img_buff.getvalue())print("image string:", img_str.decode("utf-8"))img.close()# 将字符串解码成图片bytes_image = base64.urlsafe_b64decode(img_str)image_buff = BytesIO(bytes_image)image = Image.open(image_buff)image.show()

结果如下:
在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...