无需上传, 100% 本地处理, 无需账户

文章

为什么图片每次保存都会损失质量

一张在相册里看起来清晰锐利的照片,经过几个群聊转发、又被转发了几次之后,就变得块状模糊。没有人故意编辑过它;它只是经历了几次重新编码,每一次都又丢掉了一点细节。这就是世代损失,一个古老且早已被充分理解的有损压缩特性,它解释了为什么被大量转发的图片往往会一次比一次更差。下面是有损重新编码实际丢弃了什么、为什么它会累积,以及如何阻止文件继续退化。

“有损”到底丢弃了什么

JPEG 是网络上大多数照片背后的格式,它在设计上就是有损的:其背后的标准 ITU-T T.81,工作原理是把像素块转换成频率数据,再根据画质设置或多或少地对这些数据进行四舍五入,这一步称为量化。四舍五入无法被精确撤销;被丢弃的细节是真的消失了,而不是藏在文件的某个角落。较高的画质设置四舍五入得比较温和,损失很难察觉;较低的画质设置四舍五入得很激进,文件会明显变得块状模糊,但即便只保存一次 JPEG,也总会丢弃一些东西。

每一次重新编码都是新的一代

一张照片第一次保存为 JPEG 时,相机的像素数据会被量化一次。再次打开这个 JPEG 并再次保存,即便完全没有任何编辑,也会把已经近似化的像素解码出来,再量化第二次,这是叠加在第一次四舍五入之上,而不是取而代之。每多保存一次,就是新的一代,每一代都会在前一代已经产生的块状感和色带之上继续累积。以一个合理的画质设置处理一次,几乎察觉不到损失;同一个设置在同一个文件上连续应用五六次,就会明显让照片变差,因为在下一次再度四舍五入时,前面每一代的误差都仍然存在。

五代 JPEG 的连锁反应:每一次重新编码都从上一代已经四舍五入过的像素出发,到第五代时图像明显变得块状

为什么被大量转发的图片看起来更差

一张辗转经过多个聊天、信息流和重新上传的照片,几乎在每一站都会累加新的一代:聊天应用会为聊天窗口重新压缩它,社交平台会为自己的分发流程再次重新编码,有人截图这个结果再重新上传这张截图,这又是对一张已经退化的图像进行的一次完整重新编码。这些步骤都不需要处理得多么粗心,也不需要用异常低的画质设置,效果本身就会累积起来;这种性质本身就是累加的,这正是为什么一张流传已久、广泛传播的图片,往往比同一张照片的新副本明显有更多块状感和色带。

无损格式不存在这个问题

PNG 和无损 WebP 的工作方式不同:它们通过在确切的像素数据中寻找规律,并更高效地打包,来实现压缩,不会四舍五入丢弃任何东西,因此在没有任何编辑的情况下,反复解码并重新编码同一个无损文件,无论经过多少代,都能精确复现像素。正是这种保证,使得截图以及带有锐利边缘或文字的图形通常保存为 PNG 而不是 JPEG。这也是有代价的:一张典型照片的无损文件,会比在合理画质下的 JPEG 大得多,因为没有四舍五入来压缩它。

十次重新保存的对比:JPEG 累积出明显的块状伪影,而无损 PNG 与原图逐像素保持一致

把控好文件的质量

世代损失链只有在每次保存都以上一次已经退化的像素为起点时,才会持续累积。保留一份无损母版,也就是相机原始文件或一张 PNG,每次都从这份母版重新导出一张全新的 JPEG,就能避免在旧的四舍五入之上再叠加新的四舍五入。我们的图片压缩工具让你在发送任何内容之前,就能选择画质设置并看到结果文件的大小;我们的图片对比工具则用一个滑块把原图和压缩后的副本并排放在一起,让你在把文件继续转发、开启新的一代之前,就能发现设置不当的问题。这两个工具都完全在你的浏览器中运行:需要检查的照片从不会离开你的设备。

本文涉及的工具

常见问题

复制或移动 JPEG 文件会让它变差吗?

不会。复制文件、把它添加为邮件附件,或者在文件夹之间移动它,复制的都是完全相同的字节;没有任何解码或重新编码发生,所以也不会再次量化。世代损失只有在像素被真正打开并再次保存时才会发生,而不是文件本身被移动的时候。

我能撤销世代损失,找回丢失的细节吗?

不能。量化是真正意义上的有损操作:之前某次保存丢弃的、经过四舍五入的频率数据,并没有记录在文件的任何地方,所以没有任何滤镜或算法能够重建它。对一张已经退化的 JPEG 进行锐化或降噪,可以让伪影在视觉上不那么明显,但无法恢复原始细节。

把已经退化的 JPEG 转换成 PNG,能阻止这个问题吗?

在损失已经发生之后再转换,只会逐像素保留 JPEG 那一刻的样子,不会再增加新的四舍五入步骤,但也无法恢复之前保存过程中丢失的细节。正确的做法是在更多代损失发生之前,就开始保留一份无损母版,而不是在链条的后期才去转换照片。

来源