# 关于DataURL Blob File FileReader createObjectURL canvas及其相互转化
来源:互联网 发布:java元注解 编辑:程序博客网 时间:2024/04/26 15:42
关于DataURL Blob File FileReader createObjectURL canvas及其相互转化
标签(空格分隔): js文件处理
关于DataURL Blob File FileReader createObjectURL canvas及其相互转化
DataURL
传统的img标签是通过引入服务器上的图片资源,浏览器对每个这样的img标签都会向服务器发送一个请求,一个页面中有过多的这种外部资源会导致页面的加载延迟。
而dataurl
是把资源文件的内容转换成base64编码字符串,直接把编码放到src属性里就和一个引用外部资源一样使用了,这样dataurl
可以用来优化网站加载速度,特别是html中有大量外部资源引用的时候
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAABVCAYAAACrfR34AAANXklEQ…zeoA3eFaDbhy7ZoppkoWbcQusOKWBlNlndwHIspuo7WP8A9S1SD+cdaTAAAAAASUVORK5CYII=" />
这是上面图片的效果
DataURL的问题
- 资源文件转换成base64编码文件大小会变为原来的4/3
- Data URL形式的图片不会被浏览器缓存
CSS中使用DataURL(base64编码可以放在url内使用)
background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAABVCAYAAACrfR34AAANXklEQ…zeoA3eFaDbhy7ZoppkoWbcQusOKWBlNlndwHIspuo7WP8A9S1SD+cdaTAAAAAASUVORK5CYII=");
Blob
一个
Blob
对象就是一个包含有只读原始数据的类文件对象,包含的是二进制的数据,File就是基于Blob的接口
属性
使用方法
//创建Blob对象var html = "<p>萌新瑟瑟发抖</p>";var htmlBlob = new Blob([html],'text/xml');//第一个参数是数据内容,必须写成数组的形式,第二个参数是数据的类型
Blob对象方法
slice()
用来获取Blob对象中指定范围内的数据,返回新的Blob对象
File
File
是基于Blob
的接口,创建方法类似。
属性
使用方法
//创建File对象var html = "<p>萌新瑟瑟发抖</p>";var htmlFile = new File([html],'text/xml');//第一个参数是数据内容,必须写成数组的形式,第二个参数是数据的类型
File
对象可以从<input type='file' />
获取
下面是html代码
<input type='file' id='file1' />
下面是js代码
var file1 = document.getElementById('file1').files[0];//这里的file1就是一个File对象
FileReader
FileReader 可以异步的读取计算机上的文件或者是浏览器的缓存,数据来源可以是
<input type='file' />
标签,也可以是html中的img标签等,或者是canvas的mozGetAsFile()
方法返回的结果
创建方法
var fr = new FileReader();
readyState取值
属性
方法
abort()
立即结束读取操作,并返回相应数据,这时readyState值为DONE
readAsArrayBuffer()
开始读取指定的Blob或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个ArrayBuffer对象以表示所读取文件的内容
参数
var aBuf = fr.readAsArrayBuffer(file1);
readAsBinaryString()
开始读取指定的Blob或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件,就调用它.同时,result属性中将包含读取的文件的二进制数据
readAsDataURL()
开始读取指定的Blob或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件,就调用它.同时,result属性中将包含一个DataURL格式的字符串来表示所读取文件的内容
readAsText()
开始读取指定的Blob或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件,就调用它.同时,result属性中将包含一个字符串来表示所读取文件的内容
(后面这两种方法和readAsArrayBuffer的参数及使用方式都相同)
createObjectURL
这个方法是window.URL中的一个方法,可以返回一个DataURL字符串,浏览器支持也比较好,相应的有释放的方法revokeObjectURL
参数
使用方法
var dataUrl = window.URL.createObjectURL(file1);window.URL.createObjectURL(dataurl);
canvas之toDataURL和toBlob函数
这里并不是要详细讲解canvas(毕竟博大精深,萌新根本不懂2333),只是简单介绍canvas 的 toDataURL和toBlob方法
toDataURL()
var img = new Image();img.src = dataUrl;var canvas = document.createElement('canvas');var ctx = canvas.getContext();ctx.drawImage(img,sx,sy,swidth,sheight,width,height);var dataUrl1 = canvas.toDataURL();//这里的dataUrl1就是这个canvas所绘制的这部分图像的数据
toBlob()
参数
使用方法
var blob1;var blob = canvas.toBlob(function(blob){ blob1 = blob;},'image/png');//这里的blob1就是这个canvas所绘制的这部分图像的数据
相互转换
这里是总结一下Blob/File对象与DataURL、canvas之间的转换,也包括了FileReader和createObjectURL的使用
canvas与DataURL
//就用前面代码中创建的canvas来做演示//canvas > DataURLvar dataurl = canvas.toDataURL();//可选参数type,定义dataurl中的数据类型,默认为'image/png';//DataURL > canvas//先要把DataURL写入一个Image对象中,然后用canvas来绘制var img = new Image();//创建Image对象var canvas1 = document.createElement('canvas');//创建canvasvar ctx = canvas1.getContext('2d');img.onload = function(){ ctx.drawImage(img,0,0);}//这个onload是在image对象加载数据完成后调用img.src = dataurl;
Blob/File 与 DataURL
//DataURL > Blob/File//假定现在有一个dataurl,现在直接封装一个dataURLToBlob函数function dataURLToBlob(dataurl){ var arr = dataurl.split(','); var mimeType = arr[0].match(/:(.*?);/)[1]; var mainData = arr[1];//这里的数据是一个base64编码的字符串,下面要进行解码才能传给Blob; //这里要用到atob函数将base64编码数据解码(当然也有对应的btoa函数将数据编码成base64数据) var originData = atob(mainData); return new Blob([originData],mimeType);}//Blob/File > DataURL//这个转换需要FileReader的参与,假定现在有一个file/blob对象可用var dataurl;var fr = new FileReader();fr.onload = function(){ dataurl = fr.result;}fr.readAsDataURL(file/blob);
Blob/File 与 canvas
//canvas > Blob/File//假定现在有一个canvasvar blob;canvas.toBlob(function(blob){ blob = blob;},'image/png');//Blob/File > canvas//这个转换需要FileReader的参与,假定现在有一个file/blob对象可用var dataurl;var img = new Image();var fr = new FileReader();fr.onload = function(){ dataurl = fr.result; img.src = dataurl;}img.onload = function(){ ctx.drawImage(img,0,0);}fr.readAsDataURL(file/blob);
- # 关于DataURL Blob File FileReader createObjectURL canvas及其相互转化
- TypeArray、ArrayBuffer、Blob、File、DataURL、canvas的相互转换
- canvas.toDataURL() dataURL转化blob 失败
- 关于Javascript 中的 FileReader, XMLHttpRequest, Blob, ArrayBuffer, DataURL 等
- dataURL与File,Blob,canvas对象之间的互相转换
- [Canvas]canvas元素方法和DataURL、Blob
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- javascript中DataURL(base64)与File,Blob,canvas对象之间的互相转换
- FileReader createObjectURL
- DataURL, Blob, File, Image之间的关系与转换
- 图片转化DataURL格式
- Html5——File、FileReader、Blob、Fromdata对象
- InputStream,String,File相互转化
- usb hub
- 增量数据下发整合成全量表的程序分享
- 怎样花两年时间去面试一个人
- Spring
- log过滤器的运用
- # 关于DataURL Blob File FileReader createObjectURL canvas及其相互转化
- Windows转战Ubuntu
- 栈和队列详解
- Learning Python 019 生成器(Generators)和 yield
- Android init.rc文件解析过程详解(二)
- MySql优化之my-innodb-heavy-4G.ini 中文配置详解
- 命令行看xml文件
- 二叉树的建立,从动态二叉链表转化为静态二叉链表
- 命令行看数据文件