一、前提知识
①宽度不能随便修改,高度随便改。
修改宽度需要通过爆破CRC,来得到原始的宽度,方可填入模块中,否则图片显示错误。
②对于一个 PNG 文件来说,其文件头总是由位固定的字节来描述的,剩余的部分由 3 个以上的 PNG 的数据块(Chunk)按照特定的顺序组成。
文件头89 50 4E 47 0D 0A 1A 0A+ 数据块 + 数据块 + 数据块……
struct PNG_SIGNATURE sig + struct PNG_CHUNK chunk[0] + struct PNG_CHUNK chunk[1]... ...
③每个数据块都有着统一的数据结构,每个数据块由 4 个部分组成
④修改了高度和宽度的png,在Linux里无法打开,但在Windows里可以正常打开。
这是因为在Linux里图片过不了校验。
图中清晰的显示IHDR:CRC error,说明数据被修改。
⑤CRC的值有4字节
(1)、CRC(Cyclic Redundancy Check)域中的值是对 Chunk Type Code 域和 Chunk Data 域中的数据进行计算得到的。
(2)、笔者目前读取这个值主要靠PNG模板直接读,很方便。
⑥010 editor模板
可以按标准结构,分析文件的每一部分。010 Editor的PNG模板在Templates选项中去官网下载即可使用。
二、获取正确的宽度值
我们要做的:
①把图片和脚本放到同一路径下(省事)
②把通过PNG模板读取到的CRC值粘贴到crc32 == 的后边
③运行。
注:python3下要把print i 换成 print (i)
三、把正确的宽度值填进去,保存,打开。