转:FileReader详解与实例---读取并显示图像文件

~~~针对需要读取本地图像,并立即显示在浏览器的情况,由于chrome firefox出于安全限制,input file并不返回文件的真实路径,经测试IE6/7/8都会返回真实路径,所以chrome, firefox无法直接将图像显示在页面上,这里刚好可以用到 FileReader这个东东

我们曾经在《HTML5 中 File 对象初探》中,使用到了FileReader,在那篇文章中,它被用来将一个文件读取为二进制字符串,并通过 xhr 发送到后端形成交互。作为 File API 的一部分,FileReader 专门用于读取文件,根据 W3C 的定义,FileReader 接口 "提供一些读取文件的方法与一个包含读取结果的事件模型"

接下来,我们将逐一了解 FileReader 的方法与事件模型,并最终通过一个例子程序来应用 FireRead,在这个例子中,使用支持 FileReader 浏览器的用户将能够通过一个 file input 选择一个图像文件,不经过后台将图像显示在页面中。下面的链接指向这个例子,值得注意的是,到目前为止,只有 Firefox 3.6+ 和 Chrome 6.0+ 实现了 FileReader 接口。~~~较新的chrome firefox都实现了FileReader接口

 

在这之前的 web 应用程序中,实现这个效果的通常做法是将用户选择的图像文件传送至后端,后端对其进行存储,再将 URL 返回到前端,前端通过这个 URL 来显示图像。 FileReader 的突破在于使得 JavaScript 拥有了处理文件的能力,它可以异步地读取存储在用户电脑中的文件,这里所指的文件,对于 JavaScript 来说是一个 File 对象,FileReader 读取文件的全部方法皆依赖于此,对于 File 对象还不是很了解的话,请先阅读《HTML5 中 File 对象初探》,这是本文的基础。

1. 特性检测与创建实例

检测一个浏览器是否支持 FileReader 很容易做到,支持这一接口的浏览器有一个位于 window 对象下的 FileReader 构造函数,如果浏览器有这个构造函数,那么就可以 new 一个 FileReader 的实例来使用。

        if ( typeof FileReader === 'undefined' ) {
	        alert( " 您的浏览器未实现 FileReader 接口 " );
	} else {
                var reader = new FileReader();
	        // do sth.
	}

2. 方法

FileReader 的实例拥有 4 个方法,其中 3 个用以读取文件,另一个用来中断读取。下面的表格列出了这些方法以及他们的参数和功能,需要注意的是 ,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result属性中。

方法名参数描述
abortnone中断读取
readAsBinaryStringfile将文件读取为二进制码
readAsDataURLfile将文件读取为 DataURL
readAsTextfile, [encoding]将文件读取为文本

readAsText: 该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
readAsBinaryString: 这个方法在《HTML5 中 File 对象初探》中已经被使用过一次了,它将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。
readAsDataURL: 这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URI,Data URI是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。点击这里了解更多关于 Data URI 的知识

3. 事件

FileReader 包含了一套完整的事件模型,用于捕获读取文件时的状态,下面这个表格归纳了这些事件。

事件描述
onabort中断时触发
onerror出错时触发
onload文件读取成功完成时触发
onloadend读取完成触发,无论成功或失败
onloadstart读取开始时触发
onprogress读取中

文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null ,否则即是读取的结果,绝大多数的程序都会在成功读取文件的时候,抓取这个值。

	reader.onload = function () {
		this.result     // 读取结果
	}

4. 实例

了解了这些知识过后,我们来还原之前的示例。第一步,创建 html 部分,主要包括一个 input 和一个用来呈现结果的 div:

    <p>
        <label>请选择一个图像文件:</label>
        <input type="file" id="demo_input" />
    </p> 
    <div id="demo_result">
          <!-- 这里用来显示读取结果 -->
    </div> 

接下来获取节点,并处理浏览器兼容部分,对于未实现 FileReader 接口的浏览器将给出一个提示并禁用 input,否则监听 input 的 change 事件。

if ( typeof FileReader === 'undefined' ){
        result.innerHTML = "<p class='warn'>抱歉,你的浏览器不支持 FileReader</p>";
        input.setAttribute( 'disabled','disabled' );
} else {
        input.addEventListener( 'change',readFile,false );
}

最后书写函数 readFile 的代码,当 file input 的 change 事件触发时,调用这个函数,首先获取到 file 对象,并通过 file 的 type 属性来检验文件类型,在这里,我们只允许选择图像类型的文件。然后创建一个 FileReader 实例,并且调用 readAsDataURL 方法读取文件,在实例的 load 事件中,获取到成功读取到的文件内容,并以插入一个 img 节点的方式,显示在页面中。

function readFile(){
        var file = this.files[0];  //~~~ file为用户选择的文件 type的指为文件的mime
        if(!/image\/\w+/.test(file.type)){
                alert("请确保文件为图像类型");
                return false;
        }
        var reader = new FileReader();
        reader.readAsDataURL(file);  //~~~readAsDataURL
        reader.onload = function(e){
                result.innerHTML = '<img src="'+this.result+'" alt=""/>' //~~直接将reader.result赋值给src属性,reader.result为DataURL
        }
}

读取并显示本地图片实践:

 
var himgCH; //头像在320视窗中的计算高度
    $(function(){
        var supportFileReader;
        try{ if( (typeof FileReader) =='function') supportFileReader = true;}catch(e){ supportFileReader=false; }
        var isie = navigator.userAgent.toLowerCase().indexOf('msie')>=0;
        $('#himgfile').change(function(){ 
            if(navigator.userAgent.toLowerCase().indexOf('msie')<0 || supportFileReader ){ //(!ie or ie10) chrome , firefox
                var file = this.files[0]; //用户选择的文件
                if(! /image\/\w+/.test(file.type) ){ //file.type 文件的mime值
                    alert("请选择图像文件");
                }else{
                    
                        var reader = new FileReader();
                        reader.readAsDataURL(file);//用户选择的文件readAsDataURL
                        reader.onload = function(){
                            // $('#pic4up').attr('src',this.result);
                            $('#p_up').attr('src', this.result);
                            $('#p_prev').attr('src', this.result);
                            var img = new Image();
                            img.src = this.result; 
                            setTimeout(function(){ //不能马上获得img的计算高度 适当延时
                                // console.log(img.width);
                                $('#scale').val( img.width/320 );

                                himgCH = $('#p_up').height(); 
                                $('#p_up').height(himgCH);
                                $('#p_up').imgAreaSelect({aspectRatio:'1:1', onSelectChange: preview});
                            },100 );
                            
                        }
                }
            }else{ //ie 6 7 8
                //alert('using ie8- , file value:' + this.value);
                // $('#pic4up')[0].src=this.value;
                this.select(); 
                // $('#pic4up')[0].src = document.selection.createRange().text; 
                var img = new Image(); //alert('choose file path:' + document.selection.createRange().text );
                var fpath = document.selection.createRange().text; //获取文件域的路径
                // $('#p_prev')[0].src = img.src = $('#p_up')[0].src =  fpath; //文件本地路径 赋值给img.src 实现预览

                //AlphaImageLoader实现预览 关键点: AlpahaImageLoader src=本地路径 加载的是客户端文件系统的本地路径 AlphaImageLoader加载的图片位于 容器背景和内容之间
                img.src = fpath; //获取图片的原始尺寸
                $('#p_prev,#p_up').each(function(i, ele, eles){
                    this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);";
                    this.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = fpath;
                    if(this.id == 'p_prev') this.src = 'images/blank320_320.gif';
                });

                setTimeout(function(){ //不能马上获得img的计算高度 适当延时
                    // alert(img.width);
                    $('#scale').val(img.width/320);
                    himgCH = $('#p_up').height(); 
                    $('#p_up').height(himgCH);
                    $('#p_up').imgAreaSelect({aspectRatio:'1:1', onSelectChange: preview});
                },100 ); 
            }

            //$('.iMask').removeClass('hide');
            $('.btn_disable').addClass('btn_enable');
        });



//----------------
function preview(img,selection){ //previewBox:150*150
    var scaleX = 150 / selection.width; 
    var scaleY = 150 / selection.height; 
    
    $('#p_prev').css({ //预览小图做相应的大小调整和定位
        width: Math.round(scaleX * 320) + 'px', 
        height: Math.round(scaleY * himgCH) + 'px',
        marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px', 
        marginTop: '-' + Math.round(scaleY * selection.y1) + 'px' 
    });
    // 增加原图的缩小倍数因素 调整坐标值
    var zoom = +$('#scale').val();
    $('#x1').val(selection.x1*zoom);
    $('#y1').val(selection.y1*zoom);
    $('#x2').val(selection.x2*zoom);
    $('#y2').val(selection.y2*zoom);
    $('#w').val(selection.width*zoom);
    $('#h').val(selection.height*zoom);
}
 
 

 

 

转载于:https://www.cnblogs.com/stephenykk/p/3455634.html

【日常小结】项目Modbus RTU 协议 Modbus RTU(远程终端) 协议 一、前言 最近因为码跺宽度测量项目推广升级,更换了摄像头(换成了基恩士摄像头)和光栅(换成了施莱格05LCM系列光栅),导致原来的程序用不了了,然而这个软件升级的任务落到了我身上,作为机械非科班出身的我要学习TCP和Modbus RTU通信协议,也算是自我突破了。本文只对Modbus/RTU/HEX 进行简单的小结。 二、Modbus Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻 阅读详情

相关推荐

Python爬虫实战——如何自动爬取百度搜索结果页面

本文介绍了如何使用Python爬虫抓取百度搜索结果页面的内容,包括如何构建搜索URL、获取页面HTML、解析内容、处理翻页以及存储数据等。通过该教程,您可以轻松实现批量抓取百度搜索结果,为后续的数据分析和处理打下基础。希望本文能为您在爬虫开发、数据分析等领域提供帮助。如果您在实际应用过程中遇到问题,可以参考反爬虫应对策略,结合实际需求进行调整。

2201_76125261的博客 1688

FileReader

FileReader

m0_46641774的博客 1万+

Twincat2软件安装包64位

Twincat2软件安装包64位,亲测可以使用,安装后直接使用,需不需要任何破解,倍福PLC的twincat2是可以一直使用的,没有30天试用

FileReader上传文件

  FileReader对象允许web应用程序异步读取存储在计算机上的文件的内容,使用File或Bolb对象指定要读取的文件或数据。其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以是来自拖放操作生成的DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行的mozGetAsFile()方法后返...

weixin_30861459的博客 1019

使用 FileReader进行文件读取

使用 FileReader进行文件读取

zyf971020的博客 8232

FileReader详解

我在Google Chrome Web Store上发布了一个案例hahaOCR,该扩展程序可以帮助用户识别出图片中的文字信息,以文本形式显示,大家可以在chrome网上应用商店中找到我发布的应用程序,如图所示: 图1 - hahaOCR 该扩展程序支持用户通过文件上传按钮上传图片,请看演示效果: 图2 - 测试图片 图3 - 测试效果 接下来,我们将在本文中详细讲解该案例所涉及的文件(图片)处理模块。 参考资料 MDN Web Docs:https://developer.mozilla.o

石璞东 7759

使用FileReader对象的readAsDataURL方法来读取图像文件

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

火星男孩的分享空间 5万+

HTML5 FileReader详解实例---读取显示图像文件

我们曾经在《HTML5 中 File 对象初探》中,使用到了FileReader,在那篇文章中,它被用来将一个文件读取为二进制字符串,通过 xhr 发送到后端形成交互。作为 File API 的一部分,FileReader 专门用于读取文件,根据 W3C 的定义,FileReader 接口 "提供一些读取文件的方法一个包含读取结果的事件模型"。 接下来,我们将逐一了解 Fil

sure_viola的专栏 4592

FileReader详解实例---读取显示图像文件

我们曾经在《HTML5 中 File 对象初探》中,使用到了FileReader,在那篇文章中,它被用来将一个文件读取为二进制字符串,通过 xhr 发送到后端形成交互。作为 File API 的一部分,FileReader 专门用于读取文件,根据 W3C 的定义,FileReader 接口 "提供一些读取文件的方法一个包含读取结果的事件模型"。 接下来,我们将逐一了解 FileRea

超超玄著 1100

FileReader详解实例---读取显示图像文件 | JS Mix

FileReader详解实例---读取显示图像文件 | JS Mix.

IFEIXIANG 436

FileReader读取本地图片文件显示

http://www.cnblogs.com/wang7/archive/2012/12/20/2826731.html http://www.codesky.net/article/201308/181895.html 要想在页面上显示本地图片,以前我们通常的做法是将选择的图片文件上传至后端服务器,后端对其进行存储,再将图片的URL返回到前端前端通过这个URL来显示图片。而

h564192175的专栏 3707

载:使用FileReader对象的readAsDataURL方法来读取图像文件

文章载自:http://blog.okbase.net/jquery2000/archive/1296.html; FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL。Data URL是一项特殊的技术,可以将资料(例如图片)内嵌在网页之中,不用放到外部文件。使用Data URL的好处是,您不需要额外再发出一个HTTP 请求到服务...

dinaozao7247的博客 443

php filereader,FileReader读取本地图片文件显示

要想在页面上显示本地图片,以前我们通常的做法是将选择的图片文件上传至后端服务器,后端对其进行存储,再将图片的URL返回到前端前端通过这个URL来显示图片。而HTML5的FileReader接口支持本地预览,FileReader接口主要是将文件读入内存,提供相应的方法,来读取文件中的数据,当然就能显示本地图片不需上传了。看完这篇文章后,你可以尝试制作一个拖拽和显示图片、编辑图片、最后上传的功能。...

weixin_39658759的博客 527

FileReader读取图片文件显示

第一步创建html >     >请选择一个图像文件:      type="file" id="file_input" />      id="result"> 通过getElementById获取节点,判断浏览器的兼容性. var result = document.getElementById("result");  var input = document.getEl

X_X_OO的博客 3006
上一篇: 如何禁止页面滚动
下一篇: IE读取并显示本地图像文件的方法
dayanwu2842
博客等级 码龄10年 6粉丝 107原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值