Если мы посмотрим на каждое измерение по отдельности, то просто увидеть математику для корректировки.
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
}