Slb*_*box 3 javascript base64 image node.js ecmascript-6
有没有办法使用节点,无论是原生还是插件?
我想要完成的是根据输入类型选择无损或有损图像压缩.在大型JPEG上无所畏惧是一场存储灾难.
PNG文件的前八个字节始终包含以下值 - 请参阅PNG规范:
(decimal) 137 80 78 71 13 10 26 10
(hexadecimal) 89 50 4e 47 0d 0a 1a 0a
(ASCII C notation) \211 P N G \r \n \032 \n
Run Code Online (Sandbox Code Playgroud)
所以,如果我从任何PNG文件的开头拿8个字节并且base64编码如下,我得到:
head -c8 test.png | base64
iVBORw0KGgo=
Run Code Online (Sandbox Code Playgroud)
每个JPEG文件的前2个字节都包含ff d8在十六进制中 - 请参阅JPEG的Wikipedia条目.因此,如果我采用任何JPEG文件和base64编码前两个字节,如下所示,我得到:
head -c2 test.jpg | base64
/9g=
Run Code Online (Sandbox Code Playgroud)
所以我的建议是查看你的base64编码文件的前几个(10个for PNG和2个JPEG,总是排除=)字符,看看它们是否符合我的建议,然后用它作为决定因素 - 一定要输出错误消息,如果您的字符串不匹配,以防测试由于某种原因不够彻底!
为什么PNG有10个字符?因为保证签名是8个字节,即64位和base64一次分成6位以生成字符,所以前10个字符是前60位.第11个字符将根据签名后面的内容而有所不同.
JPEG的相同逻辑... 2个字节是16位,这意味着保证了2个字符,每个字符对应6位.第3个字符将根据2字节SOI标记的内容而有所不同.
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |