我正在尝试调整图像的尺寸,同时保持其宽高比。这似乎是一个非常简单的任务,但我无法在任何地方找到相关的答案(涉及JavaScript的Image()
对象)。我可能漏掉了一些非常明显的东西。下面是我想要实现的内容:
var img = new window.Image();
img.src = imageDataUrl;
img.onload = function(){
if (img.width > 200){
img.width = 200;
img.height = (img.height*img.width)/img.width;
}
if (img.height > 200){
img.height = 200;
img.width = (img.width*img.height)/img.height;
}
};
这是将图像按比例缩放后绘制到画布上的方法,如下所示:
context.drawImage(img,0,0,canvas.width,canvas.height);
。但是似乎我不能直接更改Image()
的尺寸,那该怎么办呢?谢谢。编辑:我没有正确地使用交叉乘法解决图像比例问题。@markE提供了一种获取正确比例的简洁方法。以下是我的新(有效)实现:
var scale = Math.min((200/img.width),(200/img.height));
img.width = img.width*scale;
img.height = img.height*scale;
clearCanvas(); //clear canvas
context.drawImage(img,0,0,img.width,img.height);
drawImage
的参数中,你应该设置图像的大小。此外,通常情况下,先为图像设置载入处理程序,然后再设置 src 更加安全。 - Teemucontext.drawImage(img,0,0,img.width,img.height);
或者context.drawImage(img,0,0,null,null);
,它仍然会拉伸或不改变图像的尺寸。看起来Image()
没有.width
和.height
变量? - Matthew SpenceMath.min(200/img.width, 200/img.height, 1)
。 - Alejandro Salamanca Mazuelo