HTML Canvas图像缩放以某种方式不起作用

时间:2014-01-19 23:12:57

标签: javascript html image canvas resize

我正在尝试通过Javascript扩展本地图像:

function resizeImage(file, func){
    var canvas = document.createElement('canvas');
    var img = new Image();
    img.onload = function () {
        var factor = img.width/800;
        canvas.width = 800;
        canvas.height = img.height/factor;
        ctx = canvas.getContext('2d');
        ctx.scale(factor, factor);
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        func(canvas.toDataURL());
    }
    img.src = file.dataload; //file is an json-Object and dataload a dataURI
}

canvas.toDataURL()返回的数据不会以任何方式调整大小。 我仔细检查了canvas.width和canvas.height是正确的计算尺寸。

知道出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

尝试删除scale()方法,因为它只影响绘制到画布位图的内容,而不影响位图本身(drawImage()在任何情况下都会正确缩放图像。)

您需要使用widthheight属性缩放画布。这些是您使用toDataURL()获得的维度的基础。

var factor = img.width/800;
var scale = 2;
canvas.width = 800 * scale; 
canvas.height = img.height/factor * scale;

如果你需要画布元素在屏幕上保持不变,那么也应用CSS:

canvas.style.width = 800 + 'px'; 
canvas.style.height = img.height/factor + 'px';