Pngcrush

Original article: http://pmt.sourceforge.net/pngcrush/

[ЗАВАНТАЖИТИ] [ІСТОРІЯ ВНЕСЕННЯ ЗМІН]

Pngcrush – це оптимізатор для PNG (Portable Network Graphics) файлів. Він може бути запущений з командного рядка у вікні MS-DOS або з командного рядка UNIX або LINUX.

Його основною метою є зменшення розміру потоку даних PNG IDAT за допомогою різних рівнів стиснення і методів фільтра PNG. Оптимізатор також може використовуватися для видалення небажаних допоміжних блоків або додавання певних шматків, враховуючи gAMA, tRNS, iCCP і текстових шматків.

Коли Pngcrush статично пов'язаний із прикладеним кодом zlib, вважається, що в такому раз виробляється імунітет до zlib-1.1.3 "double-free" багу, оскільки стандартно він виявляє і відкидає будь-які "double-free" спроби. Він просто генерує повідомлення про помилку "Decompression Error" і відхиляє файл.

Pngcrush має відкритий вихідний код і може використовуватися, змінюватися і перерозподілятися будь-ким безкоштовно. Ліцензії, вбудовані у файлі pngcrush.c, еквівалентні але не ідентичні ліцензії libpng, яка міститься у файлі libpng png.h.

Джерело для Pngcrush знаходиться тут. Двійкові виконувані файли, побудовані сторонніми волонтерами, які не завжди містять обновлення знаходяться тут. Pngcrush використовує libpng і zlib, які обидва включені в дистрибутив вихідного Pngcrush. Вони трохи змінені:
libpng pngconf.h змінений на "#include pngcrush.h", який використовується для:

"#define out" (виявлення) не використовуваних частин бібліотеки
#define PNG_SETJMP_NOT_SUPPORTED
#define PNG_ABORT ()
для установки розміру буфера IDAT в більшому обсязі і
zlib файл був також змінений, щоб встановити макрос TOO_FAR в 32767 в deflate.c

Якщо Ви бажаєте, то Ви можете скомпілювати тільки pngcrush.c від вихідної поставки Pngcrush і запустити його в стоковому libpng і zlib файлах, які можна знайти на веб-сайті PNG - www.libpng.org/pub/png/. Якщо Ви це зробите:
Елемент iTXt не буде підтримуватися, якщо Ваша версія libpng не підтримує його. Libpng починає підтримувати за стандартом елемент iTXt з версії 1.4.0.

Pngcrush буде вразливий до різних умов переповнення, які були зафіксовані в серпні 2004 року, якщо ви використовуєте не пропатченну версію libpng ранішу за 1.2.7 / 1.0.17 версії.

Pngcrush буде вразливий до double-free помилки zlib-1.1.3 якщо ви зв'язали pngcrush з zlib-1.1.3 і будь-яку версію libpng 1.0.x, які не мають включеної PNG_USER_MEM_SUPPORTED.

TOO_FAR буде мати значення 4096 замість 32767 в deflate.c,
що призведе до створення більш великих файлів і більш швидкому виконанню.
Також, Ви не зможете прочитати PNG файли з помилками "Too many IDAT's".
Заздалегідь скомпільовані збірки для Windows (працює в MS-DOS вікні, побудованому під DJGPP) і платформ RISCOS (все може бути out-of-date) можно знайти тут.
Існує також гілка розробки pngcrush від Cosmin Truta з дещо іншим набором функцій і простором пошуку. Дивіться http://www.cs.toronto.edu/~cosmin/pngtech/optipng/

Pngcrush це програма командного рядка. Якщо ви віддаєте перевагу графічному інтерфейсі, деякі версії якого також доступні, в тому числі ті, які вбудовують pngcrush поряд з іншими компресорами / оптимізаторами командного рядка для зображень:

ImageOptim for Macs, free, GPLv2 license
Trimage for Linux, Windows, Mac, free, MIT license

Apple поширює змінену версію Pngcrush. Вважається, що це оригінальна версія pngcrush, яка не нагадує користувачеві про внесення змін, які вимагає ліцензія pngcrush. Програма створює файли, які не відповідають потоку даних PNG, так як вони починаються з фрагменту CgBI а не зі шматка IHDR.

Apple-модифікований pngcrush здатний повертати "iPhone оптимізацію" (крім неминучої втрати точності в основних значеннях кольору непрозорих пікселів). Є також сторонні додатків, таких як громадський домен, додаток pngdefry з відкритим вихідним кодом, які можна знайти в мережі Інтернет. Я зобов'язаний зазначити, що Apple і iPhone є зареєстрованими товарними знаками компанії Apple, Inc.

Автором pngcrush є Glenn Randers-Pehrson, glennrp@users.sf.net