有没有办法使用节点来做到这一点,无论是本机还是通过插件?
我想要完成的是根据输入类型选择无损或有损图像压缩。对大型 JPEG 进行无损存储是一场存储灾难。
PNG 文件的前八个字节始终包含以下值 - 请参阅PNG规格 http://www.libpng.org/pub/png/spec/1.2/PNG-Rationale.html#R.PNG-file-signature:
(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
因此,如果我从任何 PNG 文件的开头取出 8 个字节并按如下方式对其进行 Base64 编码,我会得到:
head -c8 test.png | base64
iVBORw0KGgo=
每个 JPEG 文件的前 2 个字节包含ff
d8
十六进制 - 请参阅JPEG 的维基百科条目 https://en.wikipedia.org/wiki/JPEG。因此,如果我采用任何 JPEG 文件并对前两个字节进行如下 base64 编码,我会得到:
head -c2 test.jpg | base64
/9g=
所以我的建议是看看前几个(10PNG
和 2 为JPEG
,总是排除=
)你的base64编码文件的字符,看看它们是否匹配我的建议,然后使用它作为决定因素 - 如果你的字符串不匹配,请确保输出错误消息,以防测试由于某种原因不够彻底!
为什么 PNG 是 10 个字符?因为保证签名是8个字节,即64位,而base64一次分割成6位来生成一个字符,所以前10个字符是前60位。第 11 个字符将根据签名后面的内容而有所不同。
JPEG 的逻辑相同... 2 个字节是 16 位,这意味着保证每个字符对应 6 位 2 个字符。第三个字符将根据 2 字节 SOI 标记后面的内容而变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)