Я написал программу для без потерь перекомпоновки файлов PNG. Поскольку, к сожалению, нет единственного параметра, который гарантирует это оптимально, я просто проверяю все (время вычисления не является объектом, и в любом случае не является необоснованным).Какие еще параметры я могу попытаться сжать это изображение PNG?
Конкретно, есть:
- 10 уровней сжатия ZLib переходить в
png_set_compression_level
(от 0 до 9) - 5 стратегий ZLib перейти в
png_set_compression_strategy
(системы, фильтруют Хаффмана только, RLE , и статический huffman) - Чередование (2 значения)
- Букет из различных префильтров для передачи в
png_set_filter
. Я используюPNG_ALL_FILTERS
, чтобы проверить их все.
Так что мой код в основном сжимает все возможные комбинации (10 * 5 * 2 = 100) и выбирает тот, который имеет самый низкий размер.
Это прекрасно работает для широкого круга типичных изображений. Для некоторых изображений сокращение может составлять до 20% (хотя более типично 5%). Напр. изображения-тяжелые веб-сайты, это заметно.
Вот PNG изображения (link to original):
Вот тестовое изображение. Он занимает точно 144,391 байт. Моя стратегия best effort составляет 145,501 байт.
Я обеспокоен не столько тем, что это на 0,77% больше. Меня беспокоит, что Я проверил все параметры, и один из них должен был быть оптимальным. Итак, это Can't Happen.
Так что мой вопрос: что происходит? Какие параметры мне не хватает? Я не видел ничего в документации.
Почему это не может случиться? Вы не знаете, сжалось ли ваше исходное изображение с помощью того же программного обеспечения, которое вы используете. – pvg
@pvg На самом деле, я знаю, что версии zlib и libpng, которые использует программа сохранения, такие же, как те, которые я использую. – imallett
Я полагаю, вы можете попробовать один из доступных бесплатных оптимизаторов png и посмотреть, что они придумали. Если он меньше, то кажется разумным предположить, что вы упустили что-то в этой дикой гусиной погоне. – pvg