简短答案:JPG 是为照片设计的有损格式,PNG 是为图形设计的无损格式。照片存成 PNG 是白白浪费几 MB,画质毫无可见提升;截图存成 JPG,文字糊边、边缘发毛。这场争论里的其他一切——文件体积、透明度、编辑行为——都源自两种格式的压缩方式。那就从这里讲起。
JPG 怎么压缩:丢掉你不会注意到的东西
JPEG 诞生于 1992 年(JPG 的历史 讲了它的来历),手法至今没变。编码器把图像切成 8×8 像素的块,每块做一次离散余弦变换,把像素值转换成频率。平滑渐变变成少数几个强低频系数;精细细节变成弱高频系数——而量化器丢掉的恰恰就是这些。
还有两个决定来自人眼的工作方式。色度分辨率被减半(色度二次采样),因为人对亮度细节的敏感度远高于色彩细节。而画质滑块本质上就是量化器的激进程度:90 几乎保住一切可见内容,60 开始丢掉你会察觉的东西。
两条硬限制要记住:JPG 每通道 8 位,且没有 alpha 通道。透明度活不过一次 JPG 保存。
另一个后果:每次保存都会重新量化。打开一个 JPG、编辑、保存,就又有一片细节没了。重复十次,图像肉眼可见地腐烂:天空出现方块,边缘泛出光晕。这就是代际损失,也是 JPG 只是分发格式、不是工作格式的原因。
PNG 怎么压缩:不惜代价保住每个像素
PNG 在九十年代中期作为 GIF 的免专利替代品出现(PNG 的诞生 讲了这段故事),它的哲学与 JPEG 完全相反:一个像素都不许变。
流水线分两级。首先,每一行像素经过一个预测滤波器——Sub、Up、Average 或 Paeth——逐行选择,让数据尽可能重复。然后过滤后的字节进入 DEFLATE,也就是 ZIP 文件用的同一套 LZ77 加霍夫曼编码家族。没有任何近似。解压后逐字节还原原始数据。
这换来三样东西:完整的 alpha 透明度(8 位,而 GIF 只有开或关的单色透明)、可选的 16 位色深、以及对代际损失的免疫——一个 PNG 保存一百次,像素逐位一致。代价在你喂给它一张照片的那一刻显现。照片像素是带噪的:每个像素都和邻居略有不同,而噪声恰恰是 DEFLATE 唯一压不动的东西。
体积的现实
同一张源图,两种格式:
| 图像 | JPG (q90) | PNG |
|---|---|---|
| 1200 万像素照片 | 约 3.4 MB | 约 20 MB |
| 1920×1080 界面截图 | 约 600 KB | 约 250 KB |
| 带透明背景的 logo | 不可能 | 约 40 KB |
这张表值得读两遍,因为两个方向都重要。照片转成 PNG 大约大六倍,却没有可见的提升。截图转成 PNG 反而更小而且更锐利,因为纯色和硬边正是 DEFLATE 预测滤波器最擅长处理的东西——也恰恰是 JPEG 量化器最擅长毁掉的东西。两种格式没有好坏之分,它们是为相反类型的数据优化的。
人们反复犯的三个错误
把截图和界面图存成 JPG。 文字和硬边是高频内容,是量化器最先丢的东西。结果就是"蚊式噪声"——每个字母周围一圈脏兮兮的光晕。来自屏幕的图,就该进 PNG。
为了"画质更好"把照片存成 PNG。 PNG 确实保留得更多,但照片在正常观看尺寸下差别不可见,你却要为此多付六倍的字节。照片要上网或发邮件,PNG 就是通往同一张图的昂贵路线。
在 JPG 里做编辑。 每次中间保存都在损失细节。解法是:工作文件用 PNG,最后一次性导出 JPG。事后再把成品 JPG 转成 PNG 什么都救不回来——只是把损伤冻结在原地。背后的原理参见我们的 有损与无损压缩详解。
什么场景用哪个格式
| 场景 | 用哪个 | 原因 |
|---|---|---|
| 网页上的照片 | JPG | 照片的最小诚实体积 |
| 截图、UI 稿、文字图 | PNG | 锐边保持锐利,文件还更小 |
| logo、图标、一切透明元素 | PNG | JPG 没有 alpha 通道 |
| 编辑和中间保存 | PNG | 没有代际损失 |
| 邮件附件、送印 | JPG | 到处能读,体积够小 |
| 纯色网页图形 | PNG | 这种内容 PNG 压得比 JPG 更好 |
如果你是在给网站选格式,两个可能都不是正确答案:WebP 通常在各自的主场同时击败它们。正面对决见 WebP 与 JPG 对比 和 WebP 与 PNG 对比。
当你需要转换时
转换只能往一个方向修复问题。PNG 转 JPG 把照片缩到原来几分之一的体积,并把透明度压到白色背景上——往老表单传图或批量发邮件前的正确一步。JPG 转 PNG 把当前像素冻结在无损容器里,让后续编辑不再继续劣化;但 JPG 已经丢掉的细节救不回来。如果你要的是透明度,JPG 转 PNG 与透明度 讲了到底能做到什么。
两个转换器都在你的浏览器本地运行——拖入文件,下载结果,没有任何上传。上面那张表会告诉你,你的文件该往哪个方向走。