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

base64编码图片

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 格式。

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编码,进行图片的传输

android 图片转base64内存变大了_开发者最喜爱的图片编码格式:opencv编码,解码,显示base64图片...相关推荐

  1. python解码图片_python的opencv读取解码的base64图片失败

    问题描述 js利用canvas.toDataURL("image/png")将canvas元素转化为base64的图片编码. python获取base64编码并解码并且保存为图片储 ...

  2. HTML图片不能上下铺满屏幕_这应该是最最最简单的,职场PPT图片排版方法了!...

    在之前的文章里,我分享过一些关于图片排版的方法. 比如像三维旋转: 文末有福利! 文末有福利! 文末有福利! 或者是图片虚化: 案例来自互联网 不过,虽然这些方法,能够帮你做出很有创意的图片排版样式, ...

  3. Linux编码解码指令-base64

    文章目录 一.编码 二.解码 三.常见编码方式整理 一.编码 从标准输入读取内容 base64 输入要编码的内容,回车换行,Ctrl+D结束输入 借助echo echo 字符串 |base64 借助& ...

  4. python图片修改过、有原图、怎么得到改动的地方_Python + opencv对拍照得到的图片进行背景去除的实现方法...

    有时候我们没办法得到pdf或者word文档,这个时候会使用手机或者相机进行拍照,往往会出现背景,打印出来就是灰色的或者有黑色的背景,这个时候影响视野观看,通过代码实现对背景去除,还原清晰图像.代码如下 ...

  5. ps界面为啥突然变大了_对新手非常友好的5个PS小技巧

    今天分享5个比较简单的PS小技巧,适合刚入门PS的萌新 出一些简单的也好,增加新手学习的信心,你看PS这么简单,我才刚学会怎么安装,就不知不觉的会了5个技巧了哈哈哈 01 快速去水印 这种用的最多的就 ...

  6. 电脑桌面整个都变大了_三招拯救你的电脑桌面,堪比整容!

    没错,上面这张图就是我电脑桌面的日常状态--刚买来第一次使用的时候都没这么简洁! 也许你会问,这么"干净"不会影响使用吗?打开软件/文件(夹)是不是要点点点点点点点点点点点很多下才 ...

  7. 华为系统更新后通知栏变大了_苹果发布多款系统更新,包括面向老机型推送iOS 12.5...

    今天,苹果正式推送了iOS 14.3和iPadOS 14.3,带来了一些新功能和错误修复.其中最引人注目的便是ProRAW,这是iPhone 12 Pro和iPhone 12 Pro Max独有的新图 ...

  8. 华为系统更新后通知栏变大了_华为EMUI又有新变动,通知栏新增多功能,流畅度堪比氢OS!...

    华为EMUI又有新变动,通知栏新增多功能,流畅度堪比氢OS! 不知道华为用户有没有升级到EMUI10.0,前段时间又新增了荣耀v20等机型可以升级,现在系统升级已经进入了末尾阶段,没有升级的朋友要赶紧 ...

  9. 华为系统更新后通知栏变大了_华为手机下滑通知栏不见了

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 华为手机下滑通知栏不见了,其原因如下: 1.有可能是开启超级省电模式后,部分通知栏快捷开关会隐藏,在超级省电模式下的主界面退出即可 ...

最新文章

  1. SQL Server 2005的服务器角色(public)的问题
  2. 总市值3862亿的创始人们在各阶段是怎么选女友的?
  3. dubbo异步调用传递性解决方法
  4. python把数据写入excel_Python读写sqlite3数据库的方法并且将数据写入Excel的实例详解...
  5. [C#] 谈谈异步编程async await
  6. Nginx应用场景之负载均衡
  7. 运行VINS-mono:/home/tony-ws1/output/pose_graph/ not exists, trying to create it /home/tony-ws1/ou错误解决
  8. [转载] 浅析Java中volatile关键字及其作用
  9. 网络互撕是群体极化的典型症状
  10. Requests库常用方法及其详解
  11. BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解
  12. 用LM方法的matlab求解,matlab中LM算法
  13. DeepMind利用AI分析动物行为,可正确识别50种大型物种
  14. qt屏幕漫天雪花飘落
  15. 亚马逊运营推热新品的一些技巧分享值得卖家们收藏!
  16. Python股票监控机器人,加强版!
  17. 我对Flutter的第一次失望
  18. 史上最全的各类奖学金、各种称号、各种职位中英文对照
  19. Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态
  20. 国产手游开源引擎Beyond Engine简介 [附视频]

热门文章

  1. python watchdog_Python watchdog
  2. JDBC的DML增删改查的代码重构设计(下)
  3. 分布式定时器的实现原理
  4. Linux虚拟化:Virtio: 一个 I/O 虚拟化框架
  5. 网络合作伙伴通信协议指南:NETWORK ASSOCIATES GUIDE TO COMMUNICATIONS PROTOCOLS
  6. MongoDB 教程 | 菜鸟教程
  7. OpenGL学习笔记:画点、直线和多边形(第二讲)
  8. java高级工程师认证考试_java高级工程师开放面试题集
  9. maya崩溃自动保存路径_xgen 分享在maya里制作头发失败经验
  10. ShadeGraph教程之节点详解4:Master Nodes