亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據縱橫比將圖像大小限制為最大高度和最大寬度

根據縱橫比將圖像大小限制為最大高度和最大寬度

冉冉說 2022-05-26 11:19:51
我有一個getMediaSize接受圖像高度和圖像寬度的函數:const MAX_HEIGHT = 500const MAX_WIDTH = 600function getMediaSize(iw, ih) {}我希望該函數MAX_WIDTH x MAX_HEIGHT根據縱橫比返回適合尺寸的新圖像寬度和高度。例如,getMediaSize(1200, 800)應該返回{ w: 600, h: 400 }
查看完整描述

2 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

如果我們單獨查看每個維度,很容易看到調整的數學。


MAX_DIMENSION = CURRENT_DIMENSION * ADJUSTMENT


// We need to figure out what the adjustment is, we have the other two values

// do some algebra and we get

ADJUSTMENT = MAX_DIMENSION / CURRENT_DIMENSION

出現的問題是每個維度都有自己的調整值,這會導致圖像被拉伸/壓縮(縱橫比不會保持不變)。所以我們只需要選擇一個調整值來使用,但是哪一個呢?當然是最小的,否則其中一個維度會溢出。


// Calculate which adjustment is the smallest, width or height

// otherwise we'd overflow one of them.

let widthPercent = MAX_WIDTH / iw;

let heightPercent = MAX_HEIGHT / ih;

let smallestPercent = Math.min(widthPercent, heightPercent);


// This works for both scaling up and scaling down

return {

    w: iw * smallestPercent,

    h: ih * smallestPercent

}


查看完整回答
反對 回復 2022-05-26
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

這是工作示例 https://codepen.io/Kison/pen/JjdaMda


這是源代碼


const MAX_HEIGHT = 500;

const MAX_WIDTH = 600;


function getMediaSize(iw, ih) {

  let 

    ratio = 0,

    height = ih,

    width = iw

  ;  


  if (iw > MAX_WIDTH && iw > ih) 

  {   

      height = MAX_WIDTH / (iw / ih /* aspect ratio */);

      width = MAX_WIDTH;

  } 

  else if (ih > MAX_HEIGHT && ih > iw) 

  {    

      width = MAX_HEIGHT / (ih / iw /* aspect ratio */);

      height = MAX_HEIGHT;

  }


  return {

    width: Math.round(width),

    height: Math.round(height)

  }

}


查看完整回答
反對 回復 2022-05-26
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號