PNG: deflate и zlib
Я пытаюсь понять сжатие в PNG - но мне кажется, что
Найти много противоречивой информации в интернете ... Я хотел бы понять ... - как осуществляется поиск в LZ77-part: хэш-таблице со связанными списками? это определяется в deflate? или реализовано в zlib? есть ли выбор метода поиска? - могут ли PNG-кодеры / декодеры устанавливать некоторые параметры для сжатия (стратегия, фильтр и т. д.) или есть значение по умолчанию для PNG? - делает ли LZ77-часть жадную или ленивую оценку? или это тоже вариант? - и наконец: 2 дерева Хаффмана, они сжаты в третьем дереве, и все три из них закодированы? или 2 дерева кодируются только их кодовыми длинами?
Отличается ли реализация zlib от других реализаций deflate?? Может быть, отсюда и все мое смятение?
Спасибо за любую помощь!! Мне это нужно для моей новой работы
LuCu
1 ответ:
Сжатие PNG осуществляется в формате zlib. Формат zlib используетdeflate . Обычно используется код библиотекиzlib .
Алгоритм, используемый для сжатия, не задан форматом. Алгоритм дефлирования библиотеки zlib использует хэш-цепочки для поиска совпадающих строк в скользящем окне. дефлят zlib принимает несколько параметров для настройки сжатия -- см.
deflateInit2()
.Формат deflate определяет сжатие Хаффмана коды на передней панели динамических блоков. Литеральные / длина и длина кода расстояния кодовые длины являются длиной выполнения и кодируются Хаффманом сами по себе.
Есть и другие реализации дефляционных компрессоров в LZMA SDK и Google zopfli, где оба из них используют более интенсивные подходы, которые требуют больше времени для небольших выигрышей в сжатии.