HTML5 Canvas 压缩 DataURL() 输出比原来更大的尺寸
HTML5 Canvas Compression's DataURL() outputing larger size than original
所以我已经紧密地实现了这个实现:
Use HTML5 to resize an image before upload.
我有以下 compressedImgURL:
compressedImageURL = canvas.toDataURL('image/jpeg', 0.8)
除了压缩之外,我需要以 jpeg 格式而非 base64 格式发送服务器。
我制作了这个 util 函数:
const byteString = atob(compressedImageURL .split(',')[1])
const mimeString = compressedImageURL .split(',')[0].split(':')[1].split(';')[0]
const ab = new ArrayBuffer(byteString.length)
const ia = new Uint8Array(ab)
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
// construct the file object
const bb = new Blob([ia], { type: mimeString })
我已经检查了 2MB 文件的图像,压缩似乎正在完成它的工作(我可以看到当我 console.log(bb.size)
我看到尺寸已经减小)。
然而,当我上传一张 10MB 的图片时,我发现它已增加到 19MB。
根据我的理解,base64 实际上增加了原始大小的 30%,但我认为添加压缩比(在本例中 0.8
)会阻止它。
dataURL
压缩图片有一定的限制吗?
对于canvas.toDataURL
,第二个参数是图像质量,而不是压缩比。 (参见:https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL#Parameters)
实际压缩率取决于图像本身,尽管一些快速搜索得出了这个答案:。另请注意,您使用的 10MB 图片可能已被压缩,压缩率通常指的是未压缩图片的大小。
由于事先无法预测压缩和质量之间的关系,一种可能的方法是降低质量,直到图像达到所需大小。
所以我已经紧密地实现了这个实现: Use HTML5 to resize an image before upload.
我有以下 compressedImgURL:
compressedImageURL = canvas.toDataURL('image/jpeg', 0.8)
除了压缩之外,我需要以 jpeg 格式而非 base64 格式发送服务器。
我制作了这个 util 函数:
const byteString = atob(compressedImageURL .split(',')[1])
const mimeString = compressedImageURL .split(',')[0].split(':')[1].split(';')[0]
const ab = new ArrayBuffer(byteString.length)
const ia = new Uint8Array(ab)
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
// construct the file object
const bb = new Blob([ia], { type: mimeString })
我已经检查了 2MB 文件的图像,压缩似乎正在完成它的工作(我可以看到当我 console.log(bb.size)
我看到尺寸已经减小)。
然而,当我上传一张 10MB 的图片时,我发现它已增加到 19MB。
根据我的理解,base64 实际上增加了原始大小的 30%,但我认为添加压缩比(在本例中 0.8
)会阻止它。
dataURL
压缩图片有一定的限制吗?
对于canvas.toDataURL
,第二个参数是图像质量,而不是压缩比。 (参见:https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL#Parameters)
实际压缩率取决于图像本身,尽管一些快速搜索得出了这个答案:。另请注意,您使用的 10MB 图片可能已被压缩,压缩率通常指的是未压缩图片的大小。
由于事先无法预测压缩和质量之间的关系,一种可能的方法是降低质量,直到图像达到所需大小。