如果你在电脑上处理过图片,很可能同时见过 JPG 和 JPEG 文件。它们看起来一样,在各类软件中的表现也一样,本质上就是同一种文件。如果你好奇为什么这两个名称会并存至今,答案并不涉及图像质量、兼容性或文件大小,而只是早期计算机的文件名限制。
把 photo.jpg 改名为 photo.jpeg,并不会对图片进行转换、重新压缩或任何修改。文件内部的编码数据保持原样,分辨率、颜色、画质和文件大小也完全不变。现代图片编辑器、浏览器、操作系统和照片查看器通常都能无差别地识别这两种扩展名。
它们甚至属于同一种媒体类型。互联网号码分配机构将 jpg 和 jpeg 都列为 image/jpeg 媒体类型的扩展名,这也是 Web 服务器和浏览器用来识别 JPEG 图像的标准类型。事实上,浏览器更依赖服务器提供的媒体类型,而不是文件名末尾的扩展名。
严格来说,JPEG 才是这种格式的正确名称。它来自 Joint Photographic Experts Group,即制定该标准的“联合图像专家组”。其核心技术早在 1992 年就以 ITU-T T.81 建议发布,后来又被纳入 ISO/IEC 10918-1 标准。而 JPG 只是这个格式的一个简称。
JPG 之所以比 JPEG 少一个字母,是因为 MS-DOS 和早期 Windows 使用过 8.3 文件名规则。在这种规则下,文件名在小数点前最多 8 个字符,小数点后最多 3 个字符。微软至今仍将这种结构称为 8.3 文件名。
这一限制意味着,老式电脑无法把 image.jpeg 作为完整文件名保存,因为 jpeg 有四个字符,超出了扩展名字段的上限。于是,PC 软件把它缩短为 jpg,同一种格式因此拥有了两个扩展名。
Windows 95 和 Windows NT 3.5 通过引入 VFAT 扩展解决了这个限制,使文件名最长可达 255 个字符,同时保留短文件名别名以兼容旧程序。但到那时,JPG 已经根深蒂固。相机、图片编辑器、网站和软件库都已广泛采用它,所以即便原始技术限制早已消失,也没有必要再把它去掉。
8.3 限制也不是微软发明的。MS-DOS 从 CP/M 继承了这一命名规则。CP/M 是 20 世纪 70 年代为早期微型计算机设计的操作系统。微软有意让 DOS 的行为与 CP/M 保持相似,以便当时的软件和开发习惯能够顺利迁移。
那么,CP/M 最初为什么恰好选择 8 个字符的文件名和 3 个字符的扩展名?目前并没有明确的技术解释。长期研究 Windows 历史的微软开发者 Raymond Chen 也表示自己不知道确切原因。他推测,这可能只是 CP/M 设计者当时觉得 8 个字符比较方便。于是,一个看似随意的决定影响了数十年后的 JPEG:它在 DOS 机器上被迫少了一个字母,而这个缩写形式一直沿用至今。
这也解释了为什么许多常见扩展名都是三个字母,例如 TXT、EXE、BMP、GIF、PNG 等。现代文件系统完全可以支持更长的扩展名,但旧限制下形成的习惯仍然存在,因为贸然改变可能会破坏软件兼容性,也会违背用户预期。
JPEG 主要是一种压缩标准,而不是一个简单的容器格式。它规定图像信息如何被编码进压缩数据流,以及如何从中解码还原。常见的 JPEG 文件通常采用 JFIF 或 Exif 规范来封装数据,其中 Exif 更常用于相机照片及其元数据。
普通 JPEG 压缩通常是有损的。编码器会把图像分成小块,进行离散余弦变换,并对变换系数进行量化,在这个过程中丢弃部分数据以减小文件体积。这样可以获得更小的文件,但也会带来可见的块状伪影、锐利边缘周围的振铃效应,以及细节被涂抹的现象。
因此,JPEG 很适合照片和其他连续色调图像,却不太适合截图、图表、小字号文字或边缘锐利的图形。标准 JPEG 文件也不支持 Alpha 通道,无法保存透明背景。如果需要透明背景或精确还原像素,PNG、WebP 或 AVIF 会是更好的选择。
不过,这些特性与文件叫 JPG 还是 JPEG 无关。压缩质量取决于保存文件时编码器使用的设置,而不是扩展名里有几个字母。
JPG 之所以成为更常见的默认选择,主要是因为它更短,也足够普及。使用 JPEG 同样没有问题,尤其是当你希望文件名与格式的完整缩写保持一致时。唯一可能产生影响的情况,是遇到编写不严谨或非常旧的软件,例如某些只接受其中一种扩展名的上传表单或脚本。但这类问题如今已经很少遇到。
归根结底,JPG 与 JPEG 之争并不像大多数文件格式那样涉及质量或技术差异。它只是一段微小的计算史:同一种图像格式,两个扩展名,以及一个因 20 世纪 70 年代操作系统文件名规则而丢失的字母。