如何将 JPG 无损转换为 PNG
把 JPG 转换成 PNG 不会增加新的损失。它做不到的是找回 JPEG 已经丢掉的细节,在转换任何文件之前,这个区别值得弄清楚。
“不损失质量”到底是什么意思
PNG 是无损的。它用 DEFLATE 压缩,和 ZIP 文件用的是同一种基本方法,这意味着每个字节都可以还原,每个像素都会和存入时完全一样地返回。JPEG 被解码并写成 PNG 时,解码器生成的像素会被完整保存下来。不做任何近似,不做任何舍入,同一个文件转换十次,每次结果都一样。
问题在于那些像素本来是什么。它们不是相机看到的那个场景,而是 JPEG 编码器对那个场景的重建结果,PNG 只是这个重建结果的一份完美副本。
为什么原始细节永远找不回来
JPEG 把图像切成小块,把每一块变换成一组频率系数,再对它们做量化:保留大致形状,把细微变化向零舍入。大多数照片都能很好地承受这个过程,因为人眼对被丢弃的部分并不敏感。但被丢弃的数值不会保存在任何地方。没有反向操作,没有隐藏副本,没有任何东西可供重建。
JPEG 通常还会以比亮度更低的分辨率存储颜色,这就是为什么颜色分明的边缘,深色背景上的红色文字是最典型的例子,即使在高质量文件里也会显得模糊。转换成 PNG 会原样保留这种模糊。如果一张 JPEG 在天空部分出现分块,或者文字周围出现光晕,PNG 会呈现出完全相同的分块和光晕,只是文件更大。
文件会大得多
这会让那些以为无损格式必然更好的人感到意外。PNG 没有办法利用 JPEG 所依赖的那些感知层面的捷径,所以一张转换成 PNG 的照片,体积通常会成倍增长,而不只是增加百分之几。精细细节和胶片颗粒是最糟的情况,因为 PNG 压缩依赖重复内容,而照片噪点几乎没有重复可言。
这正是不应该把一整个假期照片文件夹转换成 PNG 来保存的主要原因。这样做只会让占用的存储空间成倍增加,却没有任何收获,因为画质损失早已发生在相机内部。
什么时候转换仍然是对的
- 后续环节要求使用 PNG。很多上传表单、印刷模板、游戏引擎和内部工具都只接受这一种格式,这是目前为止最常见的原因。
- 您即将开始编辑。JPEG 每次重新保存都要再经历一次量化,伪影不断累积,打开、调整、保存反复十几次之后,损伤就会变得明显。只转换一次,之后都在 PNG 里工作,文件就不会继续劣化。
- 您需要先有透明通道,编辑器才能使用它。这里有必要说清楚:转换本身并不会生成透明区域。JPEG 没有透明通道,所以生成的 PNG 是完全不透明的。您得到的只是一种能够承载透明区域的格式,前提是您自己先把背景抠掉。
- 这张图是截图,或者是不小心存成了 JPEG 的扁平图形。PNG 不会修复已有的伪影,但能防止它们在之后每次保存时继续变差。
转换会丢掉什么
图像被解码、绘制到画布上,再重新编码。这个过程不会带过任何元数据,所以 PNG 不含 EXIF 信息块:没有相机型号,没有曝光参数,没有拍摄日期,没有 GPS 坐标,也没有嵌入的版权或 IPTC 字段。在公开发布照片前去掉位置信息是个实实在在的好处。不知不觉丢掉您的署名信息就不是好处了,所以如果这些信息对您重要,请保留原始文件。
色彩管理也值得同样的谨慎。浏览器会把画布内容归一化为 sRGB,所以如果广色域正是关键所在,就不应该把 Adobe RGB 或 Display P3 的广色域原图交给浏览器转换器处理。对于这种情况,以及任何需要 16 位色深或特定 PNG 调色板的场合,正确的答案是使用 ImageMagick 这类桌面工具或专业编辑软件。
在这里怎么操作
JPG 转 PNG 转换器接收一整队文件,一次性完成转换,处理好的一整套可以打包成 ZIP。它没有质量设置,这不是遗漏:PNG 本来就没有质量调节这回事。输出为每通道 8 位并带透明通道,尺寸与原图像素尺寸相同。
它也不会把您的文件发送到任何地方。转换在页面内部完成,这也是对一个尴尬事实的实际回应:人们需要转换的很多图片是护照、签过字的表单、医疗扫描件和内部截图。您可以自己验证这一点:打开开发者工具,切换到网络面板,转换一个文件,您会发现没有任何请求携带这个文件。