根据图像的尺寸和限制大小按比例缩放图像

时间:2012-04-29 19:57:38

标签: image geometry

寻找一个允许我完成此任务的表达式:

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

我的画布的宽度为w,高度为h 为了便于说明,我们只说它是320x240。

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

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

这可以用单个数学表达式编写吗?例如:

def scale_ratio(canvas_width, canvas_height, image_width, image_height)
   #math formula for calculating scale
   return scale

1 个答案:

答案 0 :(得分: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;
    }
}