網頁圖片按比例自適應縮放實現方法

用戶上傳照片,照片的尺寸未知;須要生成一個預覽,這個預覽圖要根據提供給用戶預覽的區域自應用,而且居中;若是圖片太大,須要按比例縮放。以下圖。函數

 

瞄了一下,居中能夠用 text-align:center; 來實現。而按比例縮放,利用預設 <img /> 的 width 、height 屬性解決不了。由於用戶圖片多是很長的,也多是很寬的。在線上想了一下他們的關係,按條件來判斷是這樣的:spa

if(實際寬度 > 預覽最大寬度) {
    縮放寬度 = 預覽最大寬度
}

if(實際高度 > 預覽最大高度) {
    縮放高度 = 預覽最大高度
}

可是這樣會有問題,好比當寬度和高度都被縮放,若是縮放比較不一樣,圖片就不是按比例縮放,會變得很是醜。爲了讓它按比例縮放,就須要作各類判斷了。那這樣就違背了咱們但願程序自動化的原則了。再想一想,雖然不喜歡數學,但數學仍是很好用的,應該有其餘辦法。而既然是按比例縮放,何不用實際圖像和預覽區域寬度做的比例來計算他們關係?hmmmm… 果真 OK。實際上咱們永遠都只須要縮放寬度或高度中的其中一個。由於比例只有大和小種狀況。具體的,寫一個函數來實現它吧:blog

/**
 * 圖片按比例自適應縮放
 * @param img {Element} 用戶上傳的圖片
 * @param maxWidth {Number} 預覽區域的最大寬度
 * @param maxHeight {Number} 預覽區域的最大高度
 */

var resizeImg = function(img, maxWidth, maxHeight){
        var w = img.width,
               h = img.height;

        // 當圖片比預覽區域小時不作任何改變
        if(w < maxWidth && h < maxHeight) return;

        // 當實際圖片比例大於預覽區域寬高比例時
        // 縮放圖片寬度,反之縮放圖片寬度
        w/h > maxWidth/maxHeight  ? img.width = maxWidth : img.height = maxHeight;
相關文章
相關標籤/搜索