web 图片上传实现本地预览
Posted 胡子&小猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web 图片上传实现本地预览相关的知识,希望对你有一定的参考价值。
前言:
刚成为码农不久,第一次工作中接触图片上传功能,说到图片上传,大多数程序员可能都是先上传服务器,再获取路径。如果用户多长更改图片,服务器会产生许多垃圾文件。怎样用js实现本地预览。今天特意抽空百度研究了一下。
在说上传之前先说说如何替换or美化浏览器自带的简陋上传按钮(自定义自己的上传按钮 如:img):
1.将自定义上传按钮上方添加 input file 框,实现input实现透明处理。
2.对自定义上传按钮添加事件。隐藏真正input框。用事件来触发:
function imgBtn(){
return document.getElementById("inputid").click();
}
现在浏览器基本都支持H5 。针对H5的代码:
var docObj=document.getElementById("inputid"); var imgObjPreview=document.getElementById("imgId"); imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
针对ie的代码:
docObj.select(); docObj.blur(); var localImagId = document.getElementById("divid or imgid"); var imgSrc = docObj.createTextRange().text; try{ localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)"; localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc; } catch(e) { console.log(e); alert("您上传的图片格式不正确,请重新选择!"); return false; }
很多大型网站上都使用到了这个滤镜,它是IE滤镜的一种,其主要作用就是对图片进行透明处理。虽然FireFox和IE7以上的IE浏览器已经支持透明的PNG图片,但是就IE5-IE6而言还是有一定的意义。
语法:
filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )
属性:
enabled : 可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true | false (这个基本可以忽略,被禁止了那还搞什么……)
true : 默认值。滤镜激活。
false : 滤镜被禁止。
sizingMethod : 可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。(可以无视这行说明,关键是下面的参数。一般来说单独图片且精度比较高的使用scale比较合适,除非您把所有的要用到的图片都放到一张图那就当我没说过。但是那样做的话这张png图片的体积估计不会很小。另,这个滤镜只是加载,其填充方式还是可以受CSS控制的。)
crop : 剪切图片以适应对象尺寸。
image : 默认值。增大或减小对象的尺寸边界以适应图片的尺寸。
scale : 缩放图片以适应对象的尺寸边界。
src : 必选项。字符串(String)。(指定图片的路径。要注意的是这个路径是指加载滤镜的页面相对于图片的路径而不是css文件相对于图片的路径。这跟一般的图片加载有区别。)
使用实例:
.login_logo { background-image: url(../Image/login_logo.png); _background-image: none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=‘/Public/Image/login_logo.png‘); }
以上是关于web 图片上传实现本地预览的主要内容,如果未能解决你的问题,请参考以下文章