-1

寻找一个可以让我完成此任务的表达式:

我有一个任意宽度/高度的图像,我可以在绘制它之前抓取它的尺寸。
因为图像可能非常大,我想缩小它。

我的画布将有宽度 w 和高度 h。
出于说明目的,我们只说它是 320x240。

如果图像的尺寸等于或小于画布的尺寸,则缩放比例仅为 1。如果它们更大,我将按比例缩放它与画布尺寸相比的大小。

例如,如果我的图像是 640x480,我的比例将是 0.5
如果我的图像是 640x240,我的比例仍然是 0.5
同样如果它是 320x480

这可以写成一个数学表达式吗?例如:

def scale_ratio(canvas_width, canvas_height, image_width, image_height)
   #计算比例的数学公式
   回报规模
4

1 回答 1

2
function scale(canvas_width, canvas_height, image_width, image_height) {
  return Math.min(Math.max(canvas_width / image_width, canvas_height / image_height), 1);
}

编辑:您可能想要做这样的事情来减少舍入错误:

var scale_width = image_width;
var scale_height = image_height;
if (image_width > canvas_width || image_height > canvas_height) {
    var image_ratio = image_height / image_width;
    if (image_ratio * canvas_width > canvas_height) {
        scale_width = canvas_height / image_ratio;
        scale_height = canvas_height;
    } else {
        scale_width = canvas_width;
        scale_height = image_ratio * canvas_width;
    }
}
于 2012-04-29T20:17:18.023 回答