你在网页上对一张图按右键、保存,结果落到磁盘上的是 某某.jfif。你的图像软件打不开它。预览是空白的。看起来像是有人塞给你一个没人听过的格式。
并没有。JFIF 文件就是 JPEG。几乎每一次,它的字节都和一个 .jpg 会装的内容一模一样——唯一变的是点后面那三个字母。
这份混乱背后有一个区分,值得搞懂一次。
JPEG 是一种压缩方法——一个描述“怎么把图片变成更少数据”的标准。它完全没有说那些数据该怎么存成文件。
JFIF——JPEG File Interchange Format——是对第二个问题的一个回答。它是那个外包装,说的是“这里有 JPEG 压缩过的数据、这是它的分辨率、这是显示它需要的色彩信息”。它在 1992 年发表,正是因为 JPEG 标准把文件格式留白,而各家厂商各自发明了互不兼容的版本。
所以 JFIF 不是 JPEG 的替代品。它是当初让 JPEG 文件能够互通的那个容器,而且你磁盘上绝大多数的 .jpg 本来就已经是它了。
这是个怪癖,不是任何人刻意做的决定。
浏览器存图的时候,会问操作系统“这个声明的类型——image/jpeg——对应哪个扩展名”。在 Windows 上,那个查询可能返回 .jfif 而不是 .jpg,因为注册表里的对应是那样写的。技术上正确,实务上没有帮助——这就是为什么很多从来没见过 .jfif 的人会突然开始遇到它。
图片本身没有任何不同。服务器送的是 JPEG,浏览器存的是 JPEG,只是给它贴上了 JPEG 的另一个合法扩展名。
一般来说,改扩展名是个坏建议。把 photo.webp 改成 photo.jpg 并不会转换任何东西;它只会产生一个谎报自己身份的 WebP 文件,而相信文件名的软件会以令人困惑的方式失败。
JFIF 是例外,因为根本没有东西需要转换。那个文件已经是 JPEG 了。把 image.jfif 改成 image.jpg,是在替一个内容本来就符合那个标签的文件换标签。
这也表示改名是无损的。没有重新编码发生,所以不会有“把 JPEG 转成 JPEG”那种画质衰减。如果某个程序纯粹因为扩展名而拒收你的文件——而很多程序确实只看扩展名——改名就是完整的解法。
有一个真正的技术差异,而且偶尔会要紧。
相机和手机拍出来的照片,严格说多半不是 JFIF——它们是 JPEG/Exif,另一种外包装,带着一个 EXIF 区块:相机型号、曝光设置、日期、GPS 坐标,以及那个告诉软件“这张图哪边是上”的方向标签。
JFIF 没有对应的位置。一个纯粹是 JFIF 的文件完全不带 EXIF。
实务上两者通常是混的——一个文件可以同时有 Exif 区块和 JFIF 文件头,而且大多数都是。但如果你从网站存下一张图、发现它没有相机信息也没有 GPS,那常常不是网站把它剥掉了:可能单纯是那张图从一开始就没带过 Exif。
有一个后果值得串起来:没有 EXIF 就没有方向标签,所以 JFIF 不会是那种“因为一句旋转指示而横躺”的图片。它的像素就是它的像素。
改名解决的是扩展名问题。真的想要不一样的东西时才转换:
还有一个只要牵涉 JPEG 就适用的警告:JPEG 转 JPEG 每一次都会掉画质。那是有损压缩,所以每一轮都再丢掉一点。如果改名就能解决你的问题,优先选它——它是这里唯一不花代价的选项。
这个行为来自操作系统的类型对应,不是浏览器,所以同一台机器上换浏览器也一样。要改的话是去编辑那条把 image/jpeg 对应到扩展名的注册表项——那是系统层级的改动,值得和“偶尔改个文件名”权衡一下。
image/jpeg 对应到 .jfif.jpg 安全而且无损——这在扩展名更动里很不寻常