检查上传的图像是否被压缩

时间:2016-04-07 10:21:02

标签: javascript canvas html5-canvas

我们如何检查上传的图像是否被压缩?

我想在画布上绘制图像,然后使用canvasContext.toDataUrl(type, quality)对其进行压缩,但是如果该图像尚未压缩,则此压缩仅适用于该图像。

你有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您几乎可以通过查看文件类型来确定文件是否已压缩。如果检查字符串toDataURL()生成,您将看到定义PNG或JPEG文件的mime-type - 在某些情况下,浏览器支持其他文件格式,您也可以看到BMP和ICO文件格式。

我们知道PNG文件是always compressed,因为PNG标准仅支持压缩类型0,即LZ77压缩(在线路过滤器之上影响最终压缩大小)。

JPEG always compresses,因为它使用DCT。

BMP的压缩是可选的以及TIFF的压缩,但我知道没有支持TIFF的浏览器是开箱即用的。假设BMP和ICO文件未压缩是合理的。它们确实以压缩形式存在,例如RLE,但这些很少见,并且可能会导致某些BMP解析器出现问题。但是,要完全确定,您必须解析二进制数据以查找标头中的压缩标记。

请注意,toDataURL()始终适用于原始未压缩位图。绘制到画布的原始图像是否被压缩无关紧要 - 原始图像在绘制之前总是转换为原始位图(实际上是在加载时)。

然而,在调用toDataURL()之后,它在内部生成的二进制映像将转换为Base-64字符串。这意味着由于Base-64的工作方式,尺寸增加了33%。最重要的是:JavaScript中的每个char占用2个字节(当然在JavaScript环境中这不是问题)。所以字符串的长度不是一个好的指标,因为在某些情况下它可能超过原始大小(宽度x高度x 4)(toBlob()在任何情况下都是比toDataURL()更好的替代方案,因为它具有更高的性能和更小的尺寸以及异步/非阻塞性。)

相关问题