A-A+
javascript预览本地图片程序代码
上传图片时我们在图片未上传之前就可以预览用户选择的图片了,下面我来介绍几段常用的预览本地图片程序代码。
图片上传预览是一种在图片上传之前对图片进行本地预览的技术,使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验,但随着浏览器安全性的提高,要实现图片上传预览也越来越困难。
不过群众的智慧是无限的,网上已经有很多变通或先进的方法来实现,例如ie7/ie8的滤镜预览法,firefox 3的getAsDataURL方法,但在opera、safari和chrome还是没有办法实现本地预览,只能通过后台来支持预览,代码如下:
- <style type="text/css">
- #newPreview
- {
- filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
- }
- .style1
- {
- width: 507px;
- }
- </style>
- </head>
- <script language="javascript" type="text/javascript">
- function PreviewImg(imgFile)
- {
- var newPreview = document.getElementById("newPreview");
- newPreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgFile.value;
- newPreview.style.width = "158px";
- newPreview.style.height = "180px";
- }
- </script>
- <div id="newPreview"></div>
- <asp:FileUpload ID="FileUpload1" onchange="PreviewImg(this)" runat="server" Width="408px" />
在 IE6 中,可以很方便地利用 img 的 src 属性,实现本地图片预览,然而在 IE7 中,这种办法却行不通,下面来一段兼容性比较强的代码,代码如下:
- <script language="javascript">
- var isIE = false;
- var isFF = false;
- var isSa = false;
- if((navigator.userAgent.indexOf("MSIE")>0) && (parseInt(navigator.appVersion) >=4))isIE = true;
- if(navigator.userAgent.indexOf("Firefox")>0)isFF = true;
- if(navigator.userAgent.indexOf("Safari")>0)isSa = true;
- function fileChange(obj)
- {
- if(isIE)
- {
- var url = obj.value;
- url = "file:///" + url.replace("\",'/');
- }
- else if(isFF)
- {
- var url = obj.files.item(0).getAsDataURL();
- }
- document.getElementById("ImageFile").src= url;
- } //xiariboke.net
- </script>
- <asp:FileUpload id=FileUpload1 onchange="fileChange(this);" runat="server"></asp:FileUpload><asp:Image id=ImageFile runat="server"></asp:Image>
明明IE和火狐都正常的代码,这个小不点的chrome浏览器非要跳出来不兼容你的代码。请无视google吧。
firefox使用了getAsDataURL方法,而IE是用了滤镜,代码如下:
- <input type=file name="doc" id="doc" onchange="javascript:setImagePreview();">
- <p>
- <div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none" /></div>
- </p>
- <script>
- function setImagePreview() {
- var docObj=document.getElementById("doc");
- var fileName = docObj.value;
- var imgObjPreview=document.getElementById("preview");
- if(docObj.files && docObj.files[0]){
- //火狐下,直接设img属性
- imgObjPreview.style.display = 'block';
- imgObjPreview.style.width = '150px';
- imgObjPreview.style.height = '120px';
- imgObjPreview.src = docObj.files[0].getAsDataURL();
- }else{
- //IE下,使用滤镜
- docObj.select();
- var imgSrc = document.selection.createRange().text;
- var localImagId = document.getElementById("localImag");
- //必须设置初始大小
- localImagId.style.width = "150px";
- localImagId.style.height = "120px";
- //图片异常的捕捉,防止用户修改后缀来伪造图片
- try{
- localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
- localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
- }catch(e){
- alert("您上传的图片格式不正确,请重新选择!");
- return false;
- }
- imgObjPreview.style.display = 'none';
- document.selection.empty();
- }
- return true;
- }
- </script>