缩放图像以适合或填充

缩放以适应

意味着整个图像将是可见的,但如果图像与画布不同,则可能在侧面或顶部和底部有一些空的空间。该示例显示缩放以适合的图像。两侧的蓝色是由于图像与画布不同的事实。

StackOverflow 文档

缩放填充

表示缩放图像,以便图像覆盖所有画布像素。如果图像方面与画布不同,则图像的某些部分将被剪裁。该示例显示缩放以填充的图像。请注意图像的顶部和底部是如何不再可见的。

StackOverflow 文档

示例缩放以适合

var image = new Image();
image.src = "imgURL";
image.onload = function(){
    scaleToFit(this);
}

function scaleToFit(img){
    // get the scale
    var scale = Math.min(canvas.width / img.width, canvas.height / img.height);
    // get the top left position of the image
    var x = (canvas.width / 2) - (img.width / 2) * scale;
    var y = (canvas.height / 2) - (img.height / 2) * scale;
    ctx.drawImage(img, x, y, img.width * scale, img.height * scale);
}

示例缩放以填充

var image = new Image();
image.src = "imgURL";
image.onload = function(){
    scaleToFill(this);
}

function scaleToFill(img){
    // get the scale
    var scale = Math.max(canvas.width / img.width, canvas.height / img.height);
    // get the top left position of the image
    var x = (canvas.width / 2) - (img.width / 2) * scale;
    var y = (canvas.height / 2) - (img.height / 2) * scale;
    ctx.drawImage(img, x, y, img.width * scale, img.height * scale);
}

这两个函数之间唯一的区别就在于获得规模。拟合使用最小拟合比例将填充使用最大拟合比例。