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脚本特性
Sep 13 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
js URL参数的拼接方法比较
Feb 15 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
JavaScript数据类型详解
Apr 01 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
JavaScript框架Angular和React深度对比
Nov 20 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
Vue中CSS动画原理的实现
Feb 13 Javascript
js实现简单分页导航栏效果
Jun 28 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保存session到memcache服务器的方法
2016/01/19 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
express 项目分层实践详解
2018/12/10 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python实现猜数游戏
2020/03/27 Python
python操作redis数据库的三种方法
2020/09/10 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
植树节口号
2014/06/21 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2015年团支部工作总结
2015/04/03 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android