我有一个用于图片的HTML5上传器。我为用户选择的任何图像上传了两张图像。一个是64x64,另一个是320x240。
我正在使用canvas.drawImage()
来调整图片大小。一切都很好。
但是,如何确保调整大小后的图像<= 1MB。调整大小后图像的大小是否取决于所使用的浏览器?
答案 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范围内。