图片文件
PNG
PNG 是一种无损压缩格式。其魔数为 89 50 4E 47 0D 0A 1A 0A。各字节含义为:
89:确保文件不会被旧式文本处理程序误读为文本50 4E 47:ASCII “PNG”0D 0A:CRLF 换行符,用于跨平台兼容1A:EOF 控制字符0A:再一个换行符
其文件内容由若干 IHDR块 (长度 4字节 + 类型 4字节 + 数据 + CRC 4字节) 组成,存储图片宽、高、位深、颜色类型等关键信息。
JPG/JPEG
JPG 和 JPEG 没有任何技术上的区别。它们指向的是同一种文件格式,其内部结构、压缩算法和图像质量完全一致。
在早期的 MS-DOS 和 Windows 3.1 操作系统中,文件系统(FAT16)对后缀名有严格的 “8.3” 限制:文件名最多 8 个字符,后缀名最多 3 个字符。因此,为了在 Windows 上运行,.jpeg 必须缩减为 .jpg。而当时的 Macintosh (Mac) 和 UNIX 系统没有这个限制,所以它们一直使用 .jpeg 后缀。随着 Windows 的升级(从 Windows 95 开始支持长文件名),这种限制早已消失。目前 .jpg 在 Windows 用户中更常见,而 .jpeg 在 Linux 和 Web 开发中也很流行。
两者的魔数也完全相同,文件开头与结尾各有一个。
| |
JPEG / JPG 是基于段结构的压缩格式,每段以 0xFF + 类型标识开始,例如:
FF E0:APP0 段(通常包含 JFIF 信息)FF DB:DQT 段(量化表)FF C0:SOF0 段(图像帧信息,宽高、颜色通道)
WEBP
Webp 是 Google 开发的图片格式,在现代互联网中十分常见。其魔数为 52 49 46 46 XX XX XX XX 57 45 42 50 。
其文件体段结构(12字节)包含三部分:
前 4 字节:
RIFF(参考 RIFF 容器格式)接下来的 4 字节:文件大小(小端序)
再接 4 字节:
WEBP标识 WebP 文件
GIF
一种动态图片格式,其魔数为ASCII码的 GIF87a 或 GIF89a 区分不同的版本。
其文件体由逐帧图像+压缩数据块组成,具体包含三个组成部分:
Logical Screen Descriptor:逻辑屏幕描述符,7字节。包含宽度、高度、全局调色板标识、颜色深度
Image Descriptor:每帧的起始信息
数据块:LZW 压缩的图像数据和可选扩展块(如注释、动画控制等)