当前位置: 澳门新濠3559 > 编程 > 正文

1.图片转成字节使用,Base64最早是用来解决电子邮

时间:2019-10-13 08:49来源:编程
python字节转换成图像 Atitit.Base64编码原理与实现设计,atitit.base64编码 Atitit. Base64编码原理与实现设计     Base64编码1 1.1. 为什么要用自己的base64编码方案1 Base64编码由来1 Base64编码原理

python 字节转换成图像

Atitit.Base64编码原理与实现设计,atitit.base64编码

Atitit.Base64编码原理与实现设计

 

 

  1. Base64编码1

1.1. 为什么要用自己的base64编码方案1

  1. Base64编码由来1

  2. Base64编码原理1

3.1. 具体来说,转换方式可以分为四步:2

3.2. 注意2

3.3. Padding3

  1. URL安全的Base64编码3

 

前言:

近期研究着前端性能的优化方面的知识,并以博客记之。之前有相同系列的文章(前端性能优化--图片懒加载(lazyload image)),这次继续是关于图片的处理,css spritesbase64 格式图片,这两种处理都是通过减少了http的请求来达到前端性能优化的效果,请求减少,与服务器连接次数减少,加载页面的时间就快了,如是甚好。


使用base64

1. Base64编码

Css Sprites:

1.图片转成字节使用:  base64.b64encode()

1.1. 为什么要用自己的base64编码方案

防止apache codec  jdk的jar冲突。

 

1.图片转成字节使用,Base64最早是用来解决电子邮件的传输问题澳门新濠3559。介绍:

Css Sprites(雪碧图或css精灵),是网页图片处理的一种方式,它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。

2.字节转成图片: base64.b64decode()

2. Base64编码由来

Base64最早是用来解决电子邮件的传输问题。

传统的电子邮件是1982年定下技术规范的,详见rfc0822。该规范的一个重要特点,就是规定电子邮件只能使用ASCII可打印字符。这就导致非英语字符或二进制文件(比如图片)不同通过电子邮件进行传输了。

作者::  ★(attilax)>>>   绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:[email protected]

转载请注明来源: 

 

 

原理:

将许多的小图片整合到一张大图片中,利用css中的background-image属性,background-position属性定位某个图片位置,来达到在大图片中引用某个部位的小图片的效果。

 

3. Base64编码原理

简单来说, Base64编码就是从ASCII码中选出64个字符----大写字母A-Z、小写字母a-z、数字0-9、符号" "、"/"(再加上作为填充字符的"=",实际上是65个字符),作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

 

优点:

  • 减少网页的http请求,提升网页加载速度。
  • 合并多张小图片成大图,能减少字节总数(大图大小<=多张小图大小).

图片字节串:

3.1. 具体来说,转换方式可以分为四步:

1. 将每三个字节分成一组,一共24个二进制位:3*8=24

2. 将这24个二进制位分成4组,每组有6个二进制位:24/4=6

3. 在每组前加两00,扩展成32个二进制位,即4个字节:4*(6 2)=32

4. 

根据下面的编码表,得到扩展后每个字节的对应符号,就是Base64的编码值

5. 

Value Encoding  Value Encoding  Value Encoding  Value Encoding

    0 A            17 R            34 i            51 z

    1 B            18 S            35 j            52 0

    2 C            19 T            36 k            53 1

    3 D            20 U            37 l            54 2

    4 E            21 V            38 m            55 3

    5 F            22 W            39 n            56 4

    6 G            23 X            40 o            57 5

    7 H            24 Y            41 p            58 6

    8 I            25 Z            42 q            59 7

    9 J            26 a            43 r            60 8

   10 K            27 b            44 s            61 9

   11 L            28 c            45 t            62 

   12 M            29 d            46 u            63 /

   13 N            30 e            47 v

   14 O            31 f            48 w         (pad) =

   15 P            32 g            49 x

   16 Q            33 h            50 y

6. 

 

缺点:

  • 前期需要处理图片将小图合并,多些许工程量。
  • 对于需要经常改变的图片维护起来麻烦。
iVBORw0KGgoAAAANSUhEUgAAAJYAAAAyCAYAAAC jCIaAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAj3SURBVHhe7ZzRdeI6FEVTzWuD31TC13ymifSQBqgiX kj08HrgMcFtny1ufIQYAgvy1prrzM6R7KFrRHGmDz9 8 v7cLCrdlPrCi/f/9uLPWlfk29TawcogYfNfiowUcNPmrwozw9PXU4p08GHzX4KHhfkNsE9EMNPmrwUYOPGnzU4KMGHzX4qMGP0k2sHI54lHx0kslH3DL3GEzuB7l/xU/JH2rF4oSMcvwo QQGzumTwUcNPtsz5KjBRz3Girn Bh81 KjBRw0 avBRgx lTawoVaN71KuDnfOq7j7OL62fu/9b1f06Kub6P2q9W7EMjVGDjxp8NDM6gBn6oQYfNfiowUc9BnzU4KMGHzX4qMH3cTK0M/iowUcNPmrw0czsxApyp4/XVfnC1pvTfpD7B1X/nBv3N7fI58YRpfLhEfJ8LEdUfYMolQ X5uetWJ9v21UMcPW6/Wj5ZvuSBr56/Wj9oPXflfwiIUpuZ/BRg48afNREyeOo8qwGHzX4qMFHDT5q8FGDH8XH3rgv/bIafDTTJpbDVv94PUyqp5ftRvlmnQb38t4y8jxwyLnb37v aOP5zrrPU0Vu7/6udysWIRq0ybNbrT5P8s12fdxpvB3i58FA7ocafNTgowYfNfhRGNMod5Z91OCjBh81 KjBRw0 avBRg48an9OKaBelm1iY/DuYVqX1fsVynvFOAreZ6x9ckuf9VHkmSjUuiFL5sOTzOcf2/BVrz/P29aPPp2wi5xl81OCjBh8Nqv2iJsq9x5fBRw0 avBRg48afNTgowYfNfhR2sSKUjWarrHE8Zoqe2X/v1TP w2cu067UX5NPY DfeT8kevV2HN ab1bsQyNt9v3di1VQTuDjxp81OCjkPdd5YBPO0OOGnzU4Ofx5H2RowYfNfiowUcNPmqijMZOntXgo5nZiRX0nT62r6t IMFX7mOZr Z5v1VuaDfiT/3PyfOYvL8ouW6 O58be/Cn/qP8zBXrtPPcrQagH2rwUYOP gDgo8btDD5q8FGDn8fFPnOOGnzU4KMGHzX4qIkyGjt5VoOPZtrEcrh9fznurP402L09rjdFfrt6fuGB86pOO3C 1K r 5w471Yswih5ReKuepRJp7fFOp92AviowUcDxhDgoyYKbUd5VoOPGnzU4KMGHzX4qMFHDT5q8FGDjxr8KPm8cLyjoN3EymH3Vpe yiGfPi0eVjT3H/GV3AN3bqLdXB4s W1yzsno/AxXrHxXPch31tt3h0 r/X2t8E77Tz7gowY/CvutBo1moh0 avBRg48afNTgowYfNfiowUcNPmrwUYOPGvwo fxwjqKgbWJFYQO50eiJht31etn 2rr347yqR7tcd77U71/vVixDY9TgowYfNfioJxQ aqJUkyrnWc3e36zbPn3bZJ8nNfiowUcNPmrwUYOPGnzU4KMGHzX4aGZ2YgVVp8ytck5uUOUV0XYuD q8f5s/0F8rQt1/Ysnr/CFWrHyCqxwF2uKjBh81UdqHlPWmzLMafNTgowYfNfiowUcNPmrwUYOPGnw00yaWw3vUmSDgvKrTjrrzr9Wnlev57bPIl/ql9W7FIkQNPmrwUYMfpZpQUbKa0aQCfNTgo9P11eHTLT5q8FGDjxp81OCjBh81 KjBRw0 avBRgx lm1g5HHGLvJpUObcX/GlSwVfy9om3uk83YMnPy   Yp0zqVDwpEINPmrwD5q UD9eXx38c/svucGP0iaWT3iUqtOl9Uu3/zfGk8cS5Ju/Vful/vX6cGIF2cs sDHU4EepthElaya3r/Lso bgf2zfnvPrOL3h z7b/9r9/4zcx8w5faCbWGGgkDvlDdMu5xWX5HkMVZ6Zy7mV0P00Ld0QheknbafMbT 4SV6M6cB6OOlh37/w4Va5x bczK5YdEJN7uO Af1Qg48GeRv4qMFHJ7iNcPqMfuAxOwd81OCjBh8103euvuvf38D1rRBgu6jBRw0 avCjMBZwTh9oE8vhpXUPwINw 1yn7Sg/rz6dlHyypjw/uTF9iZ7zu9TTpMo/rWt59zj4arubW8rvWz MY8K5621i5RA1 KjBR8GDCnJOG/qhBh81u7N18oxYn0e/fM1VP/KDGnzU4KMGP0r3WJIepkRzm3g9 KjBRw0 avBRg48a/CjdxMrhiFvl00GdyPmIuXx6EqP 3i/wk6 n W1e3wjyfmLVK2f3ZIluiYx4lPwuKxbgo3HAcj4d6AM5C iH9kx/S8KP9ECUfLK 9WmG9LO60RO4nlj4qMFHDT5q8FGDjxr8KG1iRaka/a16HKxcdx6lHdTEqP3n2/OxTf 2Aod6vig XNj3 ePU31 m17yn NsYj1zvVixDY9TgowYfhThQczngo0F3sI M3t7oh3YrQPm3KHrwUYOPmihtf0ecZ81vj7GaTv9Zdsy8baMGHzX4qMFHDT6amZ1YQdUp89V8dHBHnJO3g5/I f7f 7ee1XY1 BpnxLU5Y/G4IE8ef CorrHMn/b/XfldVywfWHzU4KMGf/qp2nTd1E5I4nUzXddEu9b/qAYfNfioieIxtHw30Z b378tw49YsRzesn5yUJVfXU93rn0hzJfNcUFPm8B3tKf2t63nfQaHvP jdXmS5/7dJ8f/8zUWIWrwUYOPGnzU4KMGH210f7gk3Uw8 ky2dkH8/Lb9iAv59LhMwHZRg48afNTg5xU23xpp VG7ibVbsfBRg48afNTgowYfNfhRuomVwxGPmvf3hSam65b MZnNur7XNdo 3CLvrp0GN2kDTyznFaN82t Bqk0w6g/n5j9jxTrSf0Q/nTg59z2sgO2iBh81 KjB766dipujB 2/L7x2xZr2d8B5QD/U4KMGP0qbWFGqRkv9L9RPnmbQUwzV0w5XXmOxHf7t/Nb1bsUyNEYNPmrwUYOPGnzU4KMGHzX4qMFHDT5q8NHM6K0b9hf0 YvqtLIB20UNfhRv3zl9MviowUczsxMrqDpllvyKvFqZdFuhn1ynbWa3v O78mXFSmrwUYOPGnzU4KMGHzX4qMFHDT5q8FGDj2baxFpYuC2/tv8BB256mb/wMqgAAAAASUVORK5CYII=

3.2. 注意

1. 因为转换后的每个字符的最高两位都是0,所以实际有效位数是6位,也就是26=64个字符就可以覆盖所有的编码。

2. 如果剩下的字符不足3个字节,则用0填充,输出字符使用"=",因此编码后输出的文本末尾可能会出现1或2个"="。

3. 因为Base64将3个字节转化成4个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。

 

应用例子:

  • 生成雪碧图:我这里使用了网页雪碧图制作专家,当然还有很多其他的工具
  • 合成的图片如图所示:
    澳门新濠3559 1

html代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>css Sprites</title>
</head>

<body>
    <ul class="container">
        <li class="icon icon-issue"></li>
        <li class="icon icon-upload"></li>
        <li class="icon icon-passage"></li>
    </ul>
</body>

</html>

css代码:

.container {
    overflow: hidden;
    width: 50px;
    height: 200px;
    background-color: #faa755;
}

.icon {
    margin: 0 auto;
    margin-top: 20px;
    width: 40px;
    height: 30px;
    background-image: url(icon.png);
    list-style-type: none;
}

.icon-issue {
    background-position: 0 0;
}

.icon-upload {
    background-position: 0 -50px;
}

.icon-passage {
    background-position: 0 -100px;
}
  • 效果图:
    澳门新濠3559 2

 

3.3. Padding

Base64是三个字节(Bytes)作为一组(24-bit block)的编码转换,如果字节数不是三的倍数,那么就会出最后一组只有一个或者两个字节的情况,按下面的规则处理:

1. 一个字节的情况:将这一个字节的8个二进制位,按照每组6个二进制位转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个"="号。

2. 二个字节的情况:将这二个字节的一共16个二进制位,按每组6个二进制位转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。

 

参考base64架构图片

 

适用场景:

  • 对于一些不需要多变动的小图片,表情,标志等等都可以使用。
  • 一般都是应用于小图片,太大的图片不利于合并,且定位麻烦,一次的加载时间长,导致全部图片出现时间延迟,效果不友好。

示例代码: 字节解码成图片

4. URL安全的Base64编码

由于‘ ’,‘/’两个字符在URL中有特殊含义,将Base64编码后的数据在通过URL传输时需要通过URL编码进行转义,但是这样子会导致URL无意义的变长,而且多了一个URL编解码步骤。为了避免这个问题,出现了一种用于URL的改进Base64编码变种,它其实就是简单的把标准Base64中的' '和'/'分别改成了'-'和'_'。对于填充字符'=',有些变种是把它直接去掉,有些则是把它替换成'.'。

 

Base64编码学习笔记 - 简书.html

 

Atitit. Base64编码 原理与实现设计 1 . Base64编码 1 1 .1. 为什么要用自己的 base64 编码方案 1 2...

base64:

res为图片字节串

介绍:

base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,要求把每三个8Bit的字节转换为四个6Bit的字节,Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。

通俗点讲:将资源原本二进制形式转成以64个字符基本单位,所组成的一串字符串。
比如一张图片转成base64编码后就像这样,图片直接以base64形式嵌入文件中(很长没截完):
澳门新濠3559 3

from PIL import Image
import base64
img = base64.b64decode(res)

file = open('test.jpg','wb')
file.write(img)
file.close()

生成base64编码:

图片生成base64可以用一些工具,如在线工具,但在项目中这样一个图片这样生成是挺繁琐。
特别说下,webpack中的url-loader可以完成这个工作,可以对限制大小的图片进行base64的转换,非常方便。

 

优点:

  • base64的图片会随着html或者css一起下载到浏览器,减少了请求.
  • 可避免跨域问题

缺点:

  • 老东西(低版本)的IE浏览器不兼容。
  • 体积会比原来的图片大一点。
  • css中过多使用base64图片会使得css过大,不利于css的加载。

适用场景:

  • 应用于小的图片几k的,太大的图片会转换后的大小太大,得不偿失。
  • 用于一些css sprites不利处理的小图片,如一些可以通过background-repeat平铺来做成背景的图片。

最后收收尾:

上面说的两个处理图片共同点是都是应用于小图片,都能减少请求数,但并不是所有的图片都适用,尺寸大的图片就不应使用。
两种方式都有利有弊,应该适应场景使用,权衡利弊,方可将这两种方法能力发挥好。

编辑:编程 本文来源:1.图片转成字节使用,Base64最早是用来解决电子邮

关键词: 澳门新濠3559