Base64图片编码的使用
- 一、base64编码介绍
- 二、base64图片使用介绍
- 三、base64图片编码大小与原图文件大小之间的联系
- 四、代码实现
一、base64编码介绍
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。
Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
二、base64图片使用介绍
支持 PNG、GIF、JPG、BMP、ICO 格式。
支持查看图片的具体大小。上传过程无需网络。
将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页、编辑器中。 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地方。
假定生成的代码为“data:image/jpeg;base64, …”,那么你只需要全部复制,然后在插入图片的时候,地址填写这段代码即可。
CSS中使用:
background-image: url(“data:image/png;base64,iVBORw0KGgo=…”);
HTML中使用:
图片转换Base64,无线开发、HTML5、CSS3必备的工具,CSS DataURI Base64 工具。
将图片转换成base64编码的,在web网上一般用于小图片上,不仅可以减少图片的请求数量(集合到js、css代码中),还可以防止因为一些相对路径等问题导致图片404错误。
三、base64图片编码大小与原图文件大小之间的联系
Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’通过base64编码原理我们知道,base64的图片字符流中的每8个字符就有两个是用0补充,而且字符流的末尾还可能存在‘=’号,我们可以通过这个原理计算图片的文件流大小。
我们以以下base64编码为例子:
data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAB9SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/6mHbP+LXDf/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//i104/5lwT/+RZkP/fksh/6eFaP/8/Pv/mG9N/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/+tjHL/6uHb//7+/vXx7v/8+/r//6N/Yv99SR//fUkf/31JH/99SR//fUkf/35LIf/PvK3///+vj3b/fUkf/31JH/99SR//fUkf/31JH/++pI/08Oz/vqSQ/8y3p///u6CK/31JH/99SR//fUkf/31JH/+IWDL/+vn3///s5d//iVo1/6B7XP/6+ff/8Orl/9TDtv+5nYb/nXZX/4NRKf9+SyL/fUkf/31JH/99SR//sJF3onxe/35LIv+ge1z/ils1/31JH/99SR//fUkf/6qIbf/dz8T/1MK0/31JH/99SR//fUkf/8WunP///Pv7/39MIv99SR//fUkf/31JH/99SR//fUkf/31JH//ay7///+ri2/99SR//fUkf/31JH//Frpv///38+/9/TCP/fUkf/31JH/99SR//fUkf/31JH/99SR//2szA///q4dv/fUkf/31JH/99SR//r491pIBi/31JH/99SR//fUkf/31JH/99SR//hVUt//j29P//1MK1/31JH/99SR//fUkf/4dXMP/59/b//+7o4/+MXjn/fUkf/31JH/99SR//gE0k/9XFuP///6aDZ/99SR//fUkf/31JH/99SR//up+I9vPw/8OrmP+si3D/uZ2G/+ri297Rx/99SiD/fUkf/31JH/99SR//fUkf/31KIP/KtqX//v7+/+Xb0/+HWDH/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/6eFaP/l2tL//v7+8evn/7yhi/+BTyb/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/4dXMP+Uakf/jV86/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
1.需要计算文件流大小,首先把头部的data:image/png;base64,(注意有逗号)去掉。
str=str.substring(22);
2.找到等号,把等号也去掉
int equalIndex= str.indexOf('=');if(str.indexOf('=')>0){str=str.substring(0, equalIndex);}
3.原来的字符流大小,单位为字节
int strLength=str.length();
4.计算后得到的文件流大小,单位为字节
int fileLength=strLength*3/4;
5.输出文件流大小
System.out.println(fileLength);
四、代码实现
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;import org.apache.commons.codec.binary.Base64;public class TestBase64 { //java将图片转base64代码示例public static String encodeBase64File(String filePath){File file = new File(filePath);FileInputStream inputFile = null;try {inputFile = new FileInputStream(file);byte[] buffer = new byte[(int) file.length()];inputFile.read(buffer);inputFile.close();String code = new String(Base64.encodeBase64(buffer));return code;} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(inputFile != null){try {inputFile.close();} catch (IOException e) {e.printStackTrace();}}}return null;}public static void main(String[] args) {String str="data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAB9SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/6mHbP+LXDf/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//i104/5lwT/+RZkP/fksh/6eFaP/8/Pv/mG9N/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/+tjHL/6uHb//7+/vXx7v/8+/r//6N/Yv99SR//fUkf/31JH/99SR//fUkf/35LIf/PvK3///+vj3b/fUkf/31JH/99SR//fUkf/31JH/++pI/08Oz/vqSQ/8y3p///u6CK/31JH/99SR//fUkf/31JH/+IWDL/+vn3///s5d//iVo1/6B7XP/6+ff/8Orl/9TDtv+5nYb/nXZX/4NRKf9+SyL/fUkf/31JH/99SR//sJF3onxe/35LIv+ge1z/ils1/31JH/99SR//fUkf/6qIbf/dz8T/1MK0/31JH/99SR//fUkf/8WunP///Pv7/39MIv99SR//fUkf/31JH/99SR//fUkf/31JH//ay7///+ri2/99SR//fUkf/31JH//Frpv///38+/9/TCP/fUkf/31JH/99SR//fUkf/31JH/99SR//2szA///q4dv/fUkf/31JH/99SR//r491pIBi/31JH/99SR//fUkf/31JH/99SR//hVUt//j29P//1MK1/31JH/99SR//fUkf/4dXMP/59/b//+7o4/+MXjn/fUkf/31JH/99SR//gE0k/9XFuP///6aDZ/99SR//fUkf/31JH/99SR//up+I9vPw/8OrmP+si3D/uZ2G/+ri297Rx/99SiD/fUkf/31JH/99SR//fUkf/31KIP/KtqX//v7+/+Xb0/+HWDH/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/6eFaP/l2tL//v7+8evn/7yhi/+BTyb/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/4dXMP+Uakf/jV86/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";str=str.substring(22);int equalIndex= str.indexOf('=');if(str.indexOf('=')>0){str=str.substring(0, equalIndex);}int strLength=str.length();int fileLength=strLength*3/4;System.out.println(fileLength);}}
最好看下图片大小差别:
Base64图片编码的使用相关推荐
- base64图片编码大小与原图文件大小之间的联系
base64图片编码大小与原图文件大小之间的联系 有时候我们需要把canvas画布的图画转换成图片输出页面,而用canvas生成的图片就是base64编码的,它是由数字.字母等一大串的字符组成的,但是 ...
- Python:data:image/png;base64图片编码解码
编码后的内容,可以在浏览器中直接打开,提示:先去掉回车 data类型的Url大致有下面几种形式 data:,<文本数据> data:text/plain,<文本数据> data ...
- 前端图片在线转换Base64 图片编码Base64
首先讲一下什么是图片Base64编码: 简单来说,图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 为什么要用Base64? 我们知道,我们所看到的网页上的每一 ...
- C# Base64图片编码和解码
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...
- base64图片可用,不是处处都适用
图片src可以使用base64编码的字符串表示,虽然比较方便,但不是处处都适用. 有业务系统调用我们这边的邮件接口,发送营销邮件,直接把营销图片base64处理,然后就推送过来了.图片大小平均700K ...
- Java中使用Base64进行编码解码的工具类-将验证码图片使用Base64编码并返回给前端
场景 前端使用Vue,验证码图片的src属性来自于后台SpringBoot接口. 后台验证码接口生成验证码图片并将其使用Base64进行编码. 前端就可以直接使用 data:image/png;bas ...
- android 图片转base64内存变大了_开发者最喜爱的图片编码格式:opencv编码,解码,显示base64图片...
由于图片格式尺寸较大,在互联网上若想传递一张图片,往往会 把图片进行格式转换,然后进行数据传输,图片格式往往会转换为base64编码图片 base64编码图片 BASE64编码表 base64编码 是 ...
- C++ Socket连续传输Json Base64 imencode编码的图片
C++ Socket连续传输Json Base64 imencode编码的图片 写在前面 原理 图片编码 图片的几种格式 opencv Mat FILE二进制文件 opencv imencode编码的 ...
- img图片的预览和下载(iframe基本使用),图片转file格式,file文件转base64格式,base64的编码和解码
目录 一.根据后端接口返回的URL下载和预览图片 1.调用下载图片函数实现下载图片 2.弹出另一个页面,实现预览图片. 3.不弹出另一个页面,实现下载/预览图片(iframe方式) 4.动态创建ifr ...
最新文章
- 望手指半月痕可知内脏疾病
- Linux下ssh登录速度慢的解决办法
- 如何用图表控件实现点击图例图标隐藏图表序列
- Luogu T9376 区间GCD
- 转载:网口扫盲三:以太网芯片MAC和PHY的关系
- ztree实现节点事件
- C++通过Wininet库提交POST信息登录到PHPChina中文开发者社区
- python中和操作目录相关的函数包括_python常用的文件目录操作函数
- 用python做文件处理_用Python实现文件处理
- plugin工程及与flutter工程通信原理
- Proteus20个应用技巧
- maxscale mysql_Maxscale实现Mysql读写分离
- UninstallPKG 1.1.9 Mac卸载工具
- class和style绑定
- 新浪动作挺快,开始再博客投广告了
- 盛帮股份深交所上市:市值24亿 赖喜隆父子为实控人
- android 格式化后关机,Android系统为什么用久了会卡?那格式化还原后还会卡吗?...
- python的算术表达式_python算术表达式
- 光纤熔接机日常使用说明
- 区块链入门教程(4)--搭建单机四节点FISCO BCOS联盟链