base64编码_开发者最喜爱的图片编码格式:opencv编码,解码,显示base64图片

由于图片格式尺寸较大,在互联网上若想传递一张图片,往往会 把图片进行格式转换,然后进行数据传输,图片格式往往会转换为base64编码图片

base64编码图片

ddd662be88281ac6bf55417fbf185baa.png

BASE64编码表

base64编码 是将数据用 64 个可打印的字符进行编码的方式,任何数据底层实现都是二进制,所以都可以进行 base64编码,base64编码 主要用在数据传输过程中(编码、解码)

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。

支持 PNG、GIF、JPG、BMP、ICO 格式。

caa1655f4c99a0ad57f0e7941d8abe1a.png

ASCII对照表

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’通过base64编码原理我们知道,base64的图片字符流中的每8个字符就有两个是用0补充,而且字符流的末尾还可能存在‘=’号,我们可以通过这个原理计算图片的文件流大小。

具体步骤:

按照base64编码hello单词

  1. 先找到每个字符对应的ASCII码,再将其转化为8位的二进制,转化如下:
  2. H 对应码值72,对应的二进制 01001000
  3. e对应码值101,对应的二进制:01100101
  4. l对应码值108,对应的二进制:01101100
  5. l对应码值108,对应的二进制:01101100
  6. o对应码值111,对应的二进制:01101111
  7. 查看字符是否是3的倍数,若不是,差一位,在后面补00000000,差2位,补00000000 00000000,这里最多差2位,不要问我为什么
  8. base64的码值是0-63,所以用6位的二进制就可以完全表示base64的码值(如:000000对应十进制0,111111对应的十进制为63),将上面8位一组的二进制变成6位一组的二进制

转换前:01001000 01100101 01101100 01101100 01101111 00000000

转换后:010010 000110 010101 101100 011011 000110 111100 000000

  1. 然后将6位一组的二进制高位补00(凑够8位)计算出十进制,再跟base64的编码表做对比,再将最后补位的0变成=,即可得到base64字符

00010010 对应十进制:18, 18对应base64字符:S

00000110 对应十进制:6, 6对应base64字符:G

00010101 对应十进制:21, 21对应base64字符:V

00101100 对应十进制:44, 44对应base64字符:s

00011011 对应十进制:27, 27对应base64字符:b

00000110 对应十进制:6, 6对应base64字符:G

00111100 对应十进制:18, 18对应base64字符:8

00000000 补位的0变成=(最后最多出现2个等号)

所以Hello对应的base64编码就是:SGVsbG8=

图片的处理过程跟字符处理类似

接受base64图片数据

BA        base64_pic = img_base64 # 接受图片数据        # 处理图片        pic = base64.b64decode(base64_pic)        nparr = np.fromstring(pic, np.uint8)        img = cv2.imdecode(nparr, cv2.COLOR_BGR2RGB)

img_base64为互联网上一张经过base64编码的图片

base64.b64decode(base64_pic)拿到图片后,我们首先进行base64解码

np.fromstring使用此函数获取图片字符串的信息

cv2.imdecode 从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像

得到图片后,我们就可以使用opencv 来处理图片了,你可以使用cv.imshow()函数来查看图片

传输base64图片

待处理完成图片后,我们需要把图片再次转换为base64图片格式传输给互联网

image = cv2.imencode('.jpg', img)[1]img = str(base64.b64encode(image))[2:-1]

cv2.imencode将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输

base64.b64encode进行图片的base64编码,进行图片的传输

7fb2876b26b7e3e4c286f6882c40e873.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值