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 相关文章推荐
JS Map 和 List 的简单实现代码
Jul 08 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
深入分析下javascript中的[]()+!
Jul 07 Javascript
js数组去重的5种算法实现
Nov 04 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
javascript时间差插件分享
Jul 18 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
Sep 06 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
JS去掉字符串中所有的逗号
Oct 18 Javascript
JS实现数组删除指定元素功能示例
Jun 05 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
超简单的微信小程序轮播图
Nov 22 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
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
Javascript中的数组常用方法解析
2016/06/17 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
python之PyMongo使用总结
2017/05/26 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
Pytorch 实现权重初始化
2019/12/31 Python
什么是python的id函数
2020/06/11 Python
python 实用工具状态机transitions
2020/11/21 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
什么是URL
2015/12/13 面试题
《美丽的小路》教学反思
2014/02/26 职场文书
思想作风建设心得体会
2014/10/22 职场文书
初二学生评语大全
2014/12/26 职场文书
2015年话务员工作总结
2015/04/29 职场文书
小学英语教学随笔
2015/08/14 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python