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 相关文章推荐
Confirmer JQuery确认对话框组件
Jun 09 Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
Aug 27 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
May 09 Javascript
javascript冒泡排序小结
Apr 10 Javascript
AngularJs directive详解及示例代码
Sep 01 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 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
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
javascript 二维数组的实现与应用
2010/03/16 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
pandas 将索引值相加的方法
2018/11/15 Python
Python实现微信小程序支付功能
2019/07/25 Python
Django分页功能的实现代码详解
2019/07/29 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
迪奥官网:Dior.com
2018/12/04 全球购物
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
企业金融服务方案
2014/06/03 职场文书
大学生就业自荐书
2014/06/16 职场文书
党纪处分决定书
2015/06/24 职场文书
公开致歉信
2019/06/24 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL