JavaScript使用readAsDataURL读取图像文件


Posted in Javascript onMay 10, 2017

FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL。Data URL是一项特殊的技术,可以将资料(例如图片)内嵌在网页之中,不用放到外部文件。使用Data URL的好处是,您不需要额外再发出一个HTTP 请求到服务器端取得额外的资料;而缺点便是,网页的大小可能会变大。它适合应用在内嵌小图片,不建议将大图像文件编码成Data URL来使用。您的图像文件不能够超过浏览器限定的大小,否则无法读取图像文件。

参考以下使用readAsDataURL读取图像文件范例:

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml" >
<head>
  <title> </title>
  <script type = "text/javascript" >
    function ProcessFile( e ) { 
      var file = document.getElementById('file').files[0];
      if (file) {
        
        var reader = new FileReader();
        reader.onload = function ( event ) { 
          var txt = event.target.result;
          document.getElementById("result").innerHTML = txt;
          };
       }
      reader.readAsDataURL( file );
      }
    function contentLoaded () {
      document.getElementById('file').addEventListener( 'change' ,
ProcessFile , false );
    }
    window.addEventListener( "DOMContentLoaded" , contentLoaded , false );
  </script>
</head>
<body>
  请选取一个图像文件: <input type = "file" id = "file" name = "file" />
  <div id = "result"> </div>
</body>
</html>

 

readAsDataURL方法会使用base-64进行编码,编码的资料由data字串开始,后面跟随的是MIME type,然后再加上base64字串,逗号之后就是编码过的图像文件的内容。
使用Img显示图像文件 

若想要将读取出来的图像文件,直接显示在网页上,您可以透过JavaScript建立一个<img>标签,再设定src属性为Data URL,再将<img>标签加入DOM之中,例如以下范例所示:

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml" >
<head>
<title> </title>
<script type = "text/javascript" >
function ProcessFile( e ) { 
var file = document.getElementById('file').files[0];
if ( file ) {
 
var reader = new FileReader();
reader.onload = function ( event ) { 
var txt = event.target.result;
var img = document.createElement("img");
img.src = txt;
document.getElementById("result").appendChild( img );
};
}
reader.readAsDataURL( file );
}
function contentLoaded() {
document.getElementById('file').addEventListener( 'change' ,
ProcessFile , false );
}
window.addEventListener( "DOMContentLoaded" , contentLoaded , false );
</script>
</head>
<body>
请选取一个图像文件: <input type = "file" id = "file" name = "file" />
<div id = "result"> </div>
</body>
</html>

读取部分文件

有时想要读取的文件太大,想要分段进行读取;或者只想要读取文件部分的内容,这时您可以将文件切割,根据浏览器的不同,可以使用以下方法:
webkitSlice:适用于支持Webkit引擎的浏览器,如Chrome。
mozSlice:适用于Firefox。
这两个方法要传入开始的位元组索引,以及结尾的位元组索引,索引以0开始。以下程式范例以FileReader对象的readAsBinaryString方法来读取文件,只读取文件的第三个位元组读取到第六个位元组:

<!DOCTYPE html>
<html xmlns ="http://www.w3.org/1999/xhtml" >
<head>
<title> </title>
<script type = "text/javascript" >
function ProcessFile( e ) {
var file = document.getElementById( 'file' ).files[0];
if ( file ) {
var reader = new FileReader ();
reader.onload = function ( event ) {
var txt = event.target.result;
document.getElementById( "result" ).innerHTML = txt;
};
}
if ( file.webkitSlice ) {
var blob = file.webkitSlice( 2, 4 );
} else if ( file.mozSlice ) {
var blob = file.mozSlice( 2, 4 );
}
reader.readAsBinaryString( blob );
}
function contentLoaded() {
document.getElementById( 'file' ).addEventListener( 'change' ,
ProcessFile , false );
}
window.addEventListener( "DOMContentLoaded", contentLoaded , false );
</script>
</head>
<body>
<input type = "file" id = "file" name = "file" />
<div id = "result" > </div>
</body>
</html>

请注意:

不同的浏览器对于HTML 5的支持程度不同,上述程式码可在chrome正常执行,不见得可以在其它浏览器中正确的执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
Tips 带三角可关闭的文字提示
Oct 06 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
JavaScript对Cookie进行读写操作实例
Jul 25 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
vue基于mint-ui实现城市选择三级联动
Jun 30 Javascript
React全家桶环境搭建过程详解
May 18 Javascript
Vue中父子组件通讯之todolist组件功能开发
May 21 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
使用express获取微信小程序二维码小记
May 21 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
Oct 27 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 #Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 #Javascript
详解vue-router 2.0 常用基础知识点之router.push()
May 10 #Javascript
JavaScript通过filereader接口读取文件
May 10 #Javascript
关于vue-router路径计算问题
May 10 #Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 #Javascript
Bootstrap table使用方法总结
May 10 #Javascript
You might like
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
Python字符串逐字符或逐词反转方法
2015/05/21 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
药品采购员岗位职责
2014/02/08 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
教师师德演讲稿
2014/05/06 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
在职证明范本
2015/06/15 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
javascript对象3个属性特征
2021/11/17 Javascript
Go语言测试库testify使用学习
2022/07/23 Golang
DQL数据查询语句使用示例
2022/12/24 MySQL