Javascript 为什么画布会将图像的大小增加一倍?

Javascript 为什么画布会将图像的大小增加一倍?,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,我试图使用canvas压缩来自文件输入的图像。 我在这里读到了答案,有人说canvas使文件变大了,有人用它来压缩图像,因为我不熟悉这个: function compressImg(img){ var canvas=document.createElement("canvas"); var ctx=canvas.getContext("2d"); canvas.width=img.width/2; canvas.height=img.height/2; c

我试图使用
canvas
压缩来自
文件输入的图像。
我在这里读到了答案,有人说canvas使文件变大了,有人用它来压缩图像,因为我不熟悉这个

function compressImg(img){
    var canvas=document.createElement("canvas");
    var ctx=canvas.getContext("2d");
    canvas.width=img.width/2;
    canvas.height=img.height/2;
    ctx.drawImage(img,0,0,canvas.width,canvas.height);
    document.getElementById("imagePreview0").src = canvas.toDataURL();
    const data = ctx.canvas.toDataURL(img, "image/jpeg", 0.1);
    console.log("size2",data.length);
}


var img = new Image();
img.onload = function(){
    console.log("size1",file.length);
    compressImg(img);
};
img.src = file;
对于mac电脑显示为170万的图像,我得到

尺寸2318839

尺寸2 4702282

那么,你真的能压缩图像吗

我只需要将文件大小减小到2M以下即可更改以下行:

const data = ctx.canvas.toDataURL(img, "image/jpeg", 0.1);
致:

更改以下行:

const data = ctx.canvas.toDataURL(img, "image/jpeg", 0.1);
致:


好的,toDataURL使用base64,根据定义,它比二进制字符多。这并不意味着保存的图像也会更大。toDataURL确实更大,但只有四分之一左右,而不是两倍。因此,它应该仍然比原来的尺寸小,因为,这仍然是我们的目标。相反,它翻了一番。为什么?您可以使用此方法获取数据的大小:@enxaneta谢谢,我尝试了,我得到了3526695,它仍然大1米而不是更小。不确定这里发生了什么,也找不到合适的解释。好吧,toDataURL使用base64,它的字符数比二进制定义的多。这并不意味着保存的图像也会更大。toDataURL确实更大,但只有四分之一左右,而不是两倍。因此,它应该仍然比原来的尺寸小,因为,这仍然是我们的目标。相反,它翻了一番。为什么?您可以使用此方法获取数据的大小:@enxaneta谢谢,我尝试了,我得到了3526695,它仍然大1米而不是更小。我不知道这里发生了什么,也找不到合适的解释。