在HTML5画布调整大小时限制图像大小(<1MB)

时间:2014-02-24 09:31:24

标签: html5 canvas image-resizing

我有一个用于图片的HTML5上传器。我为用户选择的任何图像上传了两张图像。一个是64x64,另一个是320x240。 我正在使用canvas.drawImage()来调整图片大小。一切都很好。

但是,如何确保调整大小后的图像<= 1MB。调整大小后图像的大小是否取决于所使用的浏览器?

1 个答案:

答案 0 :(得分:4)

您无法保证大小,因为生成的压缩文件取决于内容的压缩程度。

如果您的图像频率较高(许多细节,噪点等),那么压缩将会更加困难,您需要使用更强的质量设置(对于JPEG)来过滤掉更多数据。

但是,您可以计算图像的原始大小。 Canvas是32位,即RGB(24位)的三个8位通道+ alpha的一个8位通道。

如果您将图像保存为PNG,您将拥有RGBA - 其大小为:

width * height * 4 = size in bytes

如果您以JPEG格式保存,则只有RGB:

width * height * 3 = size in bytes

JPEG可以比PNG压缩得更重,因此您可以使用toDataURL(type [, quality= [0.0, 1.0]])的可选质量参数来缩小尺寸。

对于您的示例大小, raw 大小为:

320 x 240 x 4 = 307 200 bytes (/ 1024 = 300 kb / 1024 = 0.29 mb).

和RGB(无alpha)

320 x 240 x 3 = 230 400 bytes (/ 1024 = 225 kb / 1024 = 0.22 mb).

当图像转换为data-URI时,内容被编码为base-64。由于数据的编码方式,Base-64总是增加33%的大小(加上一个小的标题实际上使它成为数据uri,IIRC大约14-20个字节)。

在任何情况下,在这种情况下,您应该在1 MB范围内。