检查上传的图像是否经过压缩
Check if uploaded image is compressed or not
我们如何检查上传的图像是否被压缩?
我想在画布上绘制一个图像,然后使用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()
更好,因为它具有更高的性能和更小的大小,并且是异步/非阻塞的)。
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- JavaScript尾部调用中的函数是否经过优化
- 检查上传的图像是否经过压缩
- 是否可以在经过HTML转换的画布上使用getDataImage
- 角度架构表单 - 检查表单是否经过验证
- 是否可以使用 .transition() .duration() 中经过的时间作为变量
- 是否有任何jQuery构建可用's经过优化,可与underscore.js一起使用
- 流星:如何检测用户是否经过身份验证
- 是否有经过适当测试的Select2或Chosen的替代方案?
- 如何知道来自节点包管理(NPM)的包是否经过测试