file,js图片预览

来源:互联网 发布:淘宝开个什么店赚钱 编辑:程序博客网 时间:2024/06/05 02:58

URL.createObjectURL和URL.revokeObjectURL(不适用低版本浏览器)


一.URL.createObjectURL 

URL.createObjectURL()方法会根据传入的参数创建一个指向该参数对象的URL. 这个URL的生命仅存在于它被创建的这个文档里. 新的对象URL指向执行的File对象或者是Blob对象.

 

语法: 

objectURL = URL.createObjectURL(blob || file);

 

 

参数:

File对象或者Blob对象

这里大概说下File对象和Blob对象:

File对象,就是一个文件,比如我用input type="file"标签来上传文件,那么里面的每个文件都是一个File对象.

Blob对象,就是二进制数据,比如通过new Blob()创建的对象就是Blob对象.又比如,在XMLHttpRequest里,如果指定responseType为blob,那么得到的返回值也是一个blob对象.

 

注意点:

每次调用createObjectURL的时候,一个新的URL对象就被创建了.即使你已经为同一个文件创建过一个URL. 如果你不再需要这个对象,要释放它,需要使用URL.revokeObjectURL()方法. 当页面被关闭,浏览器会自动释放它,但是为了最佳性能和内存使用,当确保不再用得到它的时候,就应该释放它.

 

二.URL.revokeObjectURL

URL.revokeObjectURL()方法会释放一个通过URL.createObjectURL()创建的对象URL. 当你要已经用过了这个对象URL,然后要让浏览器知道这个URL已经不再需要指向对应的文件的时候,就需要调用这个方法.

具体的意思就是说,一个对象URL,使用这个url是可以访问到指定的文件的,但是我可能只需要访问一次,一旦已经访问到了,这个对象URL就不再需要了,就被释放掉,被释放掉以后,这个对象URL就不再指向指定的文件了.

比如一张图片,我创建了一个对象URL,然后通过这个对象URL,我页面里加载了这张图.既然已经被加载,并且不需要再次加载这张图,那我就把这个对象URL释放,然后这个URL就不再指向这张图了.

 

语法:

window.URL.revokeObjectURL(objectURL);

 

参数:

objectURL 是一个通过URL.createObjectURL()方法创建的对象URL.

 

这两个方法不支持低版本浏览器.

 

最后,给个综合栗子:

通过ajax获取一张图片,显示在页面里.

html: 

<body>    <button id="getPic">获取图片的Blob数据</button></body>

 

js:

//获取图片Blob数据      document.getElementById(‘getPic‘).onclick = function(e){        $.ajax({          type:‘GET‘,          url:‘img.png‘,          resDataType:‘blob‘,          imgType:‘png‘,          success:function(resText,resXML){            var img = document.createElement(‘img‘);            var objectUrl = window.URL.createObjectURL(resText);            img.src = objectUrl;            img.onload = function(){              window.URL.revokeObjectURL(objectUrl);            };            document.body.appendChild(img);          },          fail:function(err){            console.log(err)          }        });        e.preventDefault();      }

指定返回的数据格式为blob二进制数据.

通过返回的图片二进制数据来创建一个对象URL.

当图片加载完成后释放对象URL.


兼容IE

兼容IE可以使用IE的滤镜

关于滤镜可参考 http://www.jb51.net/css/71829.html

这里使用到

filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )
属性:enabled  :  可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true  :  默认值。滤镜激活。 false  :  滤镜被禁止。 sizingMethod  :  可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。crop  :  剪切图片以适应对象尺寸。 image  :  默认值。增大或减小对象的尺寸边界以适应图片的尺寸。 scale  :  缩放图片以适应对象的尺寸边界。 src  :  必选项。字符串(String)。使用绝对或相对 url 地址指定背景图像。假如忽略此参数,滤镜将不会作用。document.selection 参考文章  http://blog.csdn.net/cui_angel/article/details/7837749document.selection 表示当前网页中的选中内容。 
方法有:
    clear 清除选中的内容 
    empty 取消选中 
    createRange 返回 TextRange 或 ControlRange 对象 
    createRangeCollection 不支持
属性有:
    type 选中内容的类型 
    typeDetail 不支持 二、document.selection.createRange()详细介绍
     document.selection.createRange() 根据当前文字选择返回 TextRange 对象,或根据控件选择返回ControlRange 对象。
配合 execCommand,在 HTML 编辑器中很有用,比如:文字加粗、斜体、复制、粘贴、创建超链接等。
var i = document.getElementById("file");
var div = document.getElementById("pre");

//非IE
i.onchange = function(){
//使用window.URL.createObjectURL(i.files[0])
}
//IE
i.onpropertychange = function(){

div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";div.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = i.value;
}

0 0
原创粉丝点击