常见图片宽高修改
BMP图片
- 文件类型
前两个字节为
42 4D
字符为BM
- 文件大小
占4个字节,如图中
A6 4E 12 00
,颠倒后为00 12 4E A6
,所以该图片的大小为1199782字节
- 图片宽度
占4个字节,如图中
7A 03 00 00
,颠倒后为00 00 03 7A
,所以该图片宽度为890像素,约等于文件大小(00 12 4E A6) / 3 / 高度(00 00 01 C1)
- 图片高度
占4个字节,如图中
C1 01 00 00
,颠倒后为00 00 01 C1
,所以该图片的高度为449像素,约等于文件大小(00 12 4E A6) / 3 / 宽度(00 00 03 7A)
PNG图片
- 文件类型
占8个字节,为png的文件头:
89 50 4E 47 0D 0A 1A 0A
,固定格式
- 图片宽度
占4个字节,如图
00 00 04 14
,图片高度为1044像素
- 图片高度
占4个字节,如图
00 00 00 96
,图片高度为150像素
- CRC32校验块
占4个字节,如图
E1 4A 4C 0B
,值由从第12个字节到第28个字节的十七位字节进行crc计算得到
PNG图片要计算正确的宽高需要进行CRC32爆破
CRC32爆破脚本:
import struct
import binascii
m = open("./res/misc.png","rb").read()
k=0
for i in range(5000):
if k==1:
break
for j in range(5000):
c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j)+m[24:29]
crc = binascii.crc32(c) & 0xffffffff
if crc == 0x889C2F07:
#目标图片对应的crc值
k = 1
print(hex(i),hex(j))
break
JPG图片
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 keyblue的博客!
评论