Как устроено декодирование PNG: от чанков до интерлейсинга
Each step of decoding a PNG (2022)
Разбор полного процесса декодирования PNG на примере одного изображения. Сначала файл разбивается на чанки, затем данные из IDAT-чанков распаковываются через zlib, после чего каждый ряд проходит дефильтрацию. Отдельно объясняется интерлейсинг Adam7, при котором изображение загружается в семь проходов, добавляющих детали. В конце показан баг в фильтре Average, приводящий к визуальным артефактам.
Сжатые данные должны выглядеть более высокоэнтропийными, чем данные с меньшей энтропией, которые они кодируют.