← 实验室
ASTERXOR / 实验室

为什么尺寸相同的图片,文件大小差这么多

像素尺寸告诉你有多少个像素;文件大小还取决于这些像素能怎样被描述。

三张尺寸相同的合成图像:纯金色、平滑渐变和随机RGB,并排展示在同一幅图中。
这些是本地生成的测试图,不是照片。所有源图均为8位RGB,尺寸相同,未添加元数据。
实验室ASTERXOR / LEON LEUNG

三张图,每张都是786,432个像素,PNG文件却从四千字节到两百多万字节不等。

一片纯金色、一个平滑渐变、一团随机颜色,都放在1024 × 768的画布上。使用相同设置保存,文件大小却差异悬殊。问“这张图有多大”时,容易漏掉的因素,是图像内容的结构,以及格式被允许舍弃哪些信息。

画布有尺寸,描述画布也有成本。
START WITH PIXELS

尺寸确实能告诉你的一种大小

1024 × 768的图像包含786,432个像素。若每个像素有三个8位颜色通道,原始RGB采样数组就占2,359,296字节:每个位置的红、绿、蓝各一个字节。对这种表示方式来说,计算是精确的,但还没包括文件头、颜色配置文件、透明度通道,或应用程序额外使用的工作内存。

保存的文件,是这些采样值的另一种表示。它可以用更紧凑的方式描述重复模式,改变颜色的编码方法,也可以舍弃信息。因此,像素尺寸给出了重要的基准,却不能决定下载时的字节数。文件可以远小于解码后的数组;遇到不利于压缩的内容,无损文件甚至可能稍大一些。

LOSSLESS

重复内容,让PNG有东西可压缩

本实验中的PNG能够保留解码后的像素值。它的过滤步骤可以把相邻采样值之间可预测的变化,转换成更容易压缩的数据,再进行无损压缩。纯色区域有大量重复。渐变也有结构,但行与行之间的微小变化和取整,意味着实际编码并不只是写一句“从这里渐变到那里”。

实测PNG大小分别是:纯色4,025字节,渐变102,469字节,随机RGB为2,363,424字节。三者解码后都与源数组完全一致。随机图几乎没有可利用的规律,加上编码开销后,PNG甚至略大于原始RGB数组。

对数刻度的分组条形图,比较纯色、渐变和随机RGB的PNG与JPEG文件大小。
FIG 01实测文件大小,纵轴使用对数刻度。1 KiB等于1,024字节;相同的纵向间距代表相同比例,而非相同的字节差。
LOSSY

JPEG换了一种交易方式

在质量85、4:2:0色度子采样设置下,JPEG文件分别为12,917、23,726和594,655字节。本例中,纯色图的JPEG比PNG大,另外两张却更小。

JPEG通常将类似亮度的信息与颜色差异分开处理,在启用子采样时降低颜色分辨率,并对变换后的块系数进行量化。解码后的像素不必与原图相同。放大的随机颜色裁剪图把这一点展示得很清楚:原先鲜亮而独立的色点,变成了颜色更灰、结构不同的纹理。字节数减少的同时,图也变了,并不是免费地降低了完整保存每个采样值的成本。

并排放大的裁剪图:原始RGB像素颜色鲜亮,JPEG重建后的颜色更柔和、细节不同。
FIG 02JPEG编码前后的同一块64 × 64区域,用最近邻方式放大。这个刻意苛刻的输入让颜色细节的变化更明显。
THE DIAL

质量85,不等于保留了85%

编码器的质量设置控制一种取舍,并不是“保留原始信息的百分比”,也不保证观察者会注意到什么。在随机RGB输入上,测试设置从25提高到95时,文件从190,431字节增至922,548字节,RGB均方误差则从约4,962降至3,487。

这个误差只是原始与解码后通道数值之差的平方,再取平均。它可以帮助确认采样值发生了变化,却不能直接裁定视觉质量。本次测试在质量95时仍使用4:2:0色度子采样,因此提高质量设置并不会恢复源图完整的颜色分辨率。其他编码器和设置可能有不同表现。

两幅折线图展示:提高JPEG质量设置后,文件变大,RGB均方误差下降。
FIG 03对同一份随机输入实际编码五次。左图展示文件大小,右图衡量像素误差,不代表感知质量评分。
THE CAVEAT

数值没变,不代表观看体验就完整了

无损往返验证的是采样值,不是整个观看过程。颜色配置文件告诉显示系统该怎样解释这些数值。元数据、方向、透明度、位深,以及查看器如何处理颜色,也可能影响结果。这些合成样本没有附加EXIF或ICC配置文件,所以本实验不评价经过色彩管理的摄影工作流程。

随机RGB也不是一张有代表性的照片。它是一种有用的极端测试,因为相邻像素被故意设计得几乎无法互相预测。人像、截图、扫描线稿和高噪点夜景,内容结构各不相同。应当根据实际图片和使用场景判断大小与质量的取舍,而不是直接套用这一张图表。

IN PRACTICE

先问哪些东西必须留下

对于清晰的示意图或界面截图,保住边缘、文字和透明度,可能比再省一点字节更重要。对于照片,认真检查过的有损导出也可能很合理。

按读者实际观看的尺寸比较导出结果,检查重要细节,再测量文件大小。如果还会反复编辑,就保留原图。缩放改变采样数量,压缩改变采样的描述方式。知道自己正在调整哪一个因素,“把图弄小一点”就会成为更明确的要求。

留一个想法带走

小文件可能是精巧的描述,也可能是合理的取舍,或者是一张受损的图。光看字节数,分辨不出来。