文档章节

Python3 中把图片进行 base64 编码

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:25
字数 320
阅读 6
收藏 0

base64 是一种用 64 个字符来表示任意二进制数据的方法。
base64 的原理很简单,首先,准备一个包含 64 个字符的数组:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

然后,对二进制数据进行处理,每3个字节一组,一共是 3x8=24 bit,划为4组,每组正好6个bit:


这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。

如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

Python 3.6 代码实现如下:

import base64

with open('1.jpg', 'rb') as f:  # 以二进制读取图片
    data = f.read()
    encodestr = base64.b64encode(data) # 得到 byte 编码的数据
    print(str(encodestr,'utf-8'))  # 重新编码数据

来源:liaoxuefeng

本文转载自:http://www.jianshu.com/p/c1399fdb51a0

共有 人打赏支持
AllenOR灵感
粉丝 11
博文 2635
码字总数 83001
作品 0
程序员
私信 提问
关于调用外部命令时与外部命令的数据交互的注意点

前两天,我打算下载点图片。用fiddler分析了下,结果那个网页大量使用js来操作cookie,弄得我头大。 go倒是有V8引擎的封装包,可是必须还得编译这个引擎,挺麻烦的。 想起来还有selenium-py...

刘地
2014/10/02
0
0
python中base64编码与解码

引言:   在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应报文进行解码; Base64编码是一种“防君子不防小人”的...

上官夏洛特
09/06
0
0
python模块介绍- base64 使用ASCII编码二进制数据

python模块介绍-base64 使用ASCII编码二进制数据 2013-05-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 博客:http://blog.csdn.net/oychw #版权所有,转...

长平狐
2013/12/25
120
0
python模块介绍- base64 RFC 3548: Base16, Base32, Base64数据编码

python模块介绍- base64 RFC 3548: Base16, Base32, Base64数据编码 简介 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个位元为一个单元,对应某...

长平狐
2013/12/25
583
0
encode和decode的妙用

为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题。 字符串在Python内部的表示是unico...

我的去哈哈
2014/02/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

exportfs命令, vsftp搭建ftp服务

exportfs命令 当修改/etc/exports文件后,更改的内容是不会立即生效的。如果重启nfs服务,会导致客户端重启期间的请求是挂起等待的,可以把客户端的挂载umount进行卸载后,再重启nfs服务,但...

野雪球
14分钟前
1
0
编程价值观、原则、模式

读自《实现模式》 模式,即是针对特定问题的通用解决方案。 每个模式都承载这一点点理论,但实际编程中存在着一些更加深远的影响力,远不是孤立的模式所能概括的。 价值观是编程过程的统一支...

遥借东风
27分钟前
1
0
php分割二级域名做跳转处理方法

使用php中的全局变量 $_SERVER['HTTP_HOST'] ,可以获得用户当前访问的域名字符串,在这里面查询自己定义的各个子域名字符串,然后使用header函数重定向到不同的页面 代码如下 if( strpos($...

Mr_Azaz
29分钟前
2
0
容器之Zookeeper的使用

我们使用zookeeper时,都是在Linux上安装zookeeper,之后启动时要加入配置文件。 使用docker之后,我们可以直接使用镜像运行容器,镜像可以从docker.hub上下载,地址是https://hub.docker.co...

克虏伯
昨天
3
0
esxi 更换ssl证书

概述 就是想换一个证书而已,你可以通过下面的途径去申请一个泛解析域名的证书之后再esxi上安装上 使用阿里云域名api申请Let’s Encrypt泛域名免费ssl证书 申请完成证书之后进行下一步 操作 ...

bboysoulcn
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部