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米而不是更小。我不知道这里发生了什么,也找不到合适的解释。