javascript預覽本地圖片程式碼

來源:互聯網
上載者:User

圖片上傳預覽是一種在圖片上傳之前對圖片進行本地預覽的技術。
使使用者選擇圖片後能立即查看圖片,而不需上傳伺服器,提高使用者體驗。
但隨著瀏覽器安全性的提高,要實現圖片上傳預覽也越來越困難。
不過群眾的智慧是無限的,網上已經有很多變通或先進的方法來實現。
例如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;
      }
    
    </script>

<asp:FileUpload id=FileUpload1 onchange="fileChange(this);" runat="server"></asp:FileUpload><asp:Image id=ImageFile runat="server"></asp:Image>


明明IE和Firefox都正常的代碼,這個小不點的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]){
            //Firefox下,直接設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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.