以下仅适用于像素大小>= 8 位的情况。我没有调查其他案件,但我预计会有类似的结果。
由于处理通过扫描线所需的过滤器类型描述的附加数据,内容相同的隔行扫描 PNG 图像文件几乎总是更大。这是我在此网页中基于 PNG RFC RFC2083详细解释的内容。简而言之,这是因为以下每个隔行扫描的隔行过滤器类型描述的字节数总和几乎总是大于图像高度(这是非隔行图像的过滤器类型数):
nb_pass1_lines = CEIL(height/8)
nb_pass2_lines = (width>4?CEIL(height/8):0)
nb_pass3_lines = CEIL((height-4)/8)
nb_pass4_lines = (width>2?CEIL(height/4):0)
nb_pass5_lines = CEIL((height-2)/4)
nb_pass6_lines = (width>1?CEIL(height/2):0)
nb_pass7_lines = FLOOR(height/2)
虽然从理论上讲,Adam7 隔行扫描可能会意外降低数据熵/复杂度,因此在过滤的帮助下,可以通过用于PNG格式。这将是一个需要证明的特殊情况,因为熵/复杂度更可能随着交错而增加,因为通过交错解构使图像数据变得不太一致。
我使用了“意外”这个词,因为减少数据熵/复杂性不是 Adam7 隔行扫描的目的。其目的是允许通过传递机制逐步加载和显示图像。而减少熵/复杂度是PNG过滤的目的。
我使用“通常”这个词是因为,如解释网页所示,例如,1 像素的图像将通过相同长度的未压缩数据来描述,无论是否隔行扫描。因此,在这种情况下,不需要额外的空间。
当涉及到 PNG 文件大小时,交错的较小大小可能是由于:
- 文件中嵌入不同的非像素编码相关内容,如调色板(在颜色类型=!3的情况下)和非关键块,如色度、伽玛、有效位数、默认背景颜色、直方图、透明度、物理像素尺寸、时间、文本、压缩文本。请注意,其中一些与像素编码无关的内容可能会导致图像显示不同,具体取决于所使用的软件和情况。
- 不同的像素编码相关内容(可以改变图像质量),例如位深度,颜色类型(因此使用调色板或不使用颜色类型= 3),图像大小,...。
- 不同的压缩相关内容,例如更好的过滤选择,由于交错导致的数据熵/复杂性意外降低(理论特定情况),更高的压缩级别(如您所述)
如果我必须检查 2 个 PNG 图像文件是否在像素方面是等效的,我会在 bash 提示符下使用以下命令:
diff <( convert non-interlaced.png rgba:- ) <( convert interlaced.png rgba:- )
它应该没有任何区别。
对于兼容性问题,如果 PNG 编码器和 PNG 解码器实现了PNG RFC的强制性方面,我认为交错没有理由导致兼容性问题。
编辑 2018 年 11 月 13 日:
一些基于具有小众机制的自动进化分布式遗传算法的实验(托管在https://en.oga.jod.li上)在这里解释:
https ://jod.li/2018/11/13/can-an-interlaced -png-image-be-smaller-than-the-equivalent-non-interlaced-image/
这些实验表明,等效 PNG 图像的交错尺寸可能比非交错尺寸小。最好的图像是高的,它们有一个像素的宽度,并且像素内容看起来是随机的。但是,形状并不是交错图像小于非交错图像的唯一重要方面,因为具有相同形状的随机情况会导致不同的尺寸差异。
所以,是的,一些PNG图像在像素方面可以是相同的,并且对于非像素相关的内容,但交错的尺寸比非交错的要小。