用JavaScript獲取原始圖片尺寸

在項目開發中,經常會遇到要出來圖片的問題,圖片大小?圖片自適應頁面,保證圖片不變形,按比例縮放等等,所以獲取圖片的原始大小是一個非常重要的參考要訣。

 

頁面裏的img元素,想要獲取它的原始尺寸,以寬度爲例可能首先想到的就是width,如下:

 

<imgsrc="http://img11.360buyimg.com/da/g14/M07/01/0E/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg">

<script>

   var img = document.getElementsByTagName('img')[0]

   var width = getWH(img, 'width') // 690

</script>

 

這裏使用的getWH方法是之前文章裏提到的。這時候獲取的寬度和圖片的原始尺寸是一樣的。

 

如果給img加上了width屬性,這種方式就不行了,比如圖片實際寬度是690,設置了width爲400,這時按上面的方式獲取則返回400

 

<img width="400" src="http://img11.360buyimg.com/da/g14/M07/01/0E/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg">

<script>

   var img = document.getElementsByTagName('img')[0]

   var width = getWH(img, 'width') // 400

</script>

 

很明顯,400不是圖片的原始寬度。

 

有一種方式可以獲取到,直接創建一個新img對象,然後把舊img的src賦值給新的,這時候獲取新img的寬度即可

 

<img width="400"src="http://img11.360buyimg.com/da/g14/M07/01/0E/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg">

<script>

function getNaturalWidth(img) {

   var image = new Image()

   image.src = img.src

    varnaturalWidth = image.width

   return naturalWidth

}

var img =document.getElementsByTagName('img')[0]

getNaturalWidth(img) // 690

</script>

 

需要注意的是,這裏新創建的image是不需要添加的DOM文檔裏的。

 

HTML5提供了一個新屬性naturalWidth/naturalHeight可以直接獲取圖片的原始寬高。這兩個屬性在Firefox/Chrome/Safari/Opera及IE9裏已經實現。改造下獲取圖片尺寸的方法。

 

function getImgNaturalDimensions(img,callback) {

   var nWidth, nHeight

   if (img.naturalWidth) { // 現代瀏覽器

       nWidth = img.naturalWidth

       nHeight = img.naturalHeight

    }else { // IE6/7/8

       var imgae = new Image()

       image.src = img.src

       image.onload = function() {

           callback(image.width, image.height)

       }

    }

   return [nWidth, nHeight]

}

 

注意IE6/7/8的處理,創建了一個新的img,僅設置其src,這時需要讓圖片完全載入後纔可以獲取其寬高。因此這裏是異步的,可以傳一個回調,回調裏把原始的寬高作爲參數傳入。

 

本文爲Anyforweb技術分享博客,需要了解網站建設及更多web應用相關信息,請訪問anyforweb.com。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章