去年我写了一篇关于这个主题的博客文章。你可以在这里阅读。基本上,它提供了一种以适当的纵横比缩放图像的功能。它包括支持横向和纵向方向以及两者之间的大小。您甚至可以在“信箱”和“平移和扫描(缩放)”模式之间进行选择。
它是在考虑 div 定位的情况下编写的,但对于 canvas 来说很容易理解。
靠近页面底部的是“ScaleImage”功能。这可能就是你想要的。然后你可以按如下方式应用它:
var img = new Image();
img.onload = function () {
var result = ScaleImage(img.width, img.height, 300, 200, true);
ctx.drawImage(img, result.targetleft, result.targettop, result.width, result.height); // resizes image to a target size of 300x200 using letterbox mode
}
img.src = 'images/myimage.jpg';
如果您不希望图像居中,您可以将 result.targetleft 和 result.targettop 替换为“0”。