检查上传的图像是否经过压缩

Check if uploaded image is compressed or not

本文关键字:是否 经过 压缩 图像 检查      更新时间:2024-03-10

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

我想在画布上绘制一个图像,然后使用canvasContext.toDataUrl(type, quality)对其进行压缩,但这种压缩仅适用于尚未压缩的图像。

你有什么建议吗?

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

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

JPEG总是像使用DCT一样进行压缩。

BMP和TIFF的压缩都是可选的,尽管我所知道的浏览器都不支持TIFF。假设BMP和ICO文件是未压缩的是合理的。它们确实以压缩形式存在,如RLE,但这些形式很少见,可能会给一些BMP解析器带来问题。不过,为了绝对确定,您必须解析二进制数据,以便在标头中查找压缩标志。

请注意,toDataURL()始终处理未压缩的原始位图。绘制到画布上的原始图像是否被压缩并不重要——原始图像在绘制之前(实际上是在加载时)总是被转换为原始位图。

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