繁体   English   中英

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

[英]Check if uploaded image is compressed or not

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

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

你有什么建议吗?

您几乎可以通过查看文件类型来确定文件是否已压缩。 如果您检查toDataURL()生成的字符串,您将看到定义 PNG 或 JPEG 文件的mime 类型- 在某些浏览器支持其他文件格式的情况下,您还可以看到 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()更好的替代方案,因为它具有更高的性能和减小尺寸以及异步/非阻塞)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM