Майже все добре, але мій favicon.ico
важив цілих 4286 байт. Зменшив до 766. Розкажу́ як.
Спершу я позбувся згладжування та полутоні́в. Для іко́нки 32×32 зі звичайної, «розмитої» версії я вручну у Gimp’і зробив чітку «піксельну»:
Як бачите, у новій версії є жовтий колір, є чорний колір і є прозорі пікселі. І все. Це значить, що можна обійтися палітрою з трьох кольорів, чи не так?
Спочатку роблю версію з палітрою через pngnq
, потім мінімізую розмір за допомогою optipng
та advpng
. У результаті я маю супер-легкий PNG файл 32-pixart.png
, 32×32 пікселі, палітра з трьох кольорів (всі три містять альфа-канал), загальний розмір файлу 175 байт.
Далі намагаюся звичайними методами зробити ICO.
convert icon/32-pixart.png favicon.ico
icotool -c -b 32 -p 3 -o favicon.ico icon/32-pixart.png
Ніт. Обидва варіанти дають файл вагою 4286 байт. Срака!
Наскільки я розумію, проблема починається з того, що всі три кольори в палітрі містять альфа-канал. Це якимось чином призводить до того, що генерується «важка» версія ICO-файлу, у якій 32×32 пікселі з 24-бітним кольором і 8-бітною альфою.
Я ж добре пам’ятаю, що замість «напівпрозорості», тобто повноцінного 8-бітного альфа-каналу, колись була «однобітна прозорість», як у GIF, піксель або 100% прозорий, або 100% непрозорий. А, стоп, GIF! Спробував GIF як проміжний формат.
convert icon/32-pixart.png favicon.gif
convert favicon.gif favicon.ico
І це, нарешті, дало кращий результат. Наразі це 766 байт. Можливо, можна ще круті́ше стиснути?
Upd.: Крутіше саму favicon я не стиснув, але трохи виправив гамму (жовтий був якийсь темний) та випадково зменшив оптимізовану версію 32-pixart.png
ще на один байт. Прико́льно :)