nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

PNGOut нервно курит в сторонке

Попробовал сканы, сделанные с помощью своей программки, посильнее ужать без потерь с помощью хвалёной PNGOut и вот что получил:
PNGOutScrewsUp.png

Т.е она тратит от 1.5 до 8 минут на каждый файл, пытаясь за множество проходов найти оптимальный способ кодирования, но в результате только увеличивает файл на 5-6% (по умолчанию там стоит настройка не заменять файл, если не удалось уменьшить его размер, но я её отключил, хотел посмотреть, чего может добиться PNGOut).

Получается, что моя немножко "доработанная напильником" библиотека для работы с PNG лучше во всех отношениях: получает файлы меньшего размера, и это занимает у неё на порядок меньше времени!


А ведь ничего такого экстра-сложного я не делал, просто прочитал мануалы по Zlib и техническое описание формата PNG. В мануалах я обнаружил, что вместо "универсального" режима сжатия Z_DEFAULT_STRATEGY можно выбрать специально заточенный под PNG режим Z_FILTERED - он тогда сосредотачивается на частоте появления тех или иных байтов, вместо попыток увидеть повторяющиеся элементы изображения - ведь пространственную корреляцию уже "выбрали" фильтры-предикторы PNG.

В описании PNG давалась рекомендация по выбору фильтров-предикторов - на каждую строку изображения можно выбрать свой, и лучшим в большинстве случаев будет тот, после которого сумма абсолютных значений байтов (если воспринимать их как знаковые числа) будет наименьшей. И еще одна хитрость - всю картинку можно запихнуть в один-единственный IDAT, тогда как по умолчанию их пихают побольше, это еще высвобождает сколько-то байтов.

Ну и ещё у меня предпринимаются попытки снизить число бит на пиксель - если, к примеру, на входе у нас RGB-изображение (24 бита на пиксель), то мы подсчитываем количество реально используемых цветов, если их число превысило 256, значит, мы бессильны, придется оставить как есть. Но если их мало, то можно применить палитру, а если совсем повезет - то и градации серого. Впрочем, при сжатии сканов это не помогает.

Сейчас написал свою собственную утилитку, которой указываешь папку, и она пытается уменьшить размер PNG и TIFF - изображений (разумеется, без потерь) - может весьма пригодиться книжным маньякам-оцифровщикам, чтобы архивы сырых сканов стали занимать меньше места. Насколько меньше они будут занимать - зависит от программы сканирования - Book Pavilion сжимает в PNG весьма недурно, после нее мне удается ужать файлы на 0.3..0.6%. Любые TIFF'ы процентов на 20 сожмутся обязательно, просто потому что PNG с его фильтрами-предикторами позволяет выжать из файла побольше воды. Paint.NET и другие программы, использующие штатную библиотеку PNG из .NET Фреймворка сжимают довольно хреново, полноцветные картинки или в градациях серого можно ужать на те же 20%, а однобитные ч/б - и вовсе в несколько раз, поскольку эта библиотека не умеет применять формат пикселя менее 8 бит!

Осталось довести до ума - и утилиту, и ту программку пакетного сканирования, и хотя бы иконки для них придумать, а то иконка среды разработки - не комильфо!
Tags: Книги, программки
Subscribe

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • А всё-таки есть польза от ковариаций

    Вчера опробовал "сценарий", когда варьируем дальность от 1 метра до 11 метров. Получилось, что грамотное усреднение - это взять с огромными весами…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 29 comments

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • А всё-таки есть польза от ковариаций

    Вчера опробовал "сценарий", когда варьируем дальность от 1 метра до 11 метров. Получилось, что грамотное усреднение - это взять с огромными весами…