Компания Google на днях объявила о том, что выводит алгоритм сжатия изображений Guetzli в opensource. В компании утверждают, что этот алгоритм способен ужимать размеры JPEG-файлов на 35%, если сравнивать с другими используемыми методами. Этому есть много применений, одно из лежащих на поверхности: создание сайтов, которые быстрее грузятся. Теперь каждый разработчик может изучить его исходники на GitHub.
Название Guetzli со швейцарского немецкого переводится как “печенье”. Это – кодировщик JPEG-файлов, который может ускорять работу с картинками в онлайне, создавая меньшие версии файла, обеспечивая совместимость с текущими версиями браузеров и приложений.
Визуальное качество JPEG-изображений напрямую связано с многоступенчатым процессом сжатия: преобразование цветового пространства, дискретное косинуидальное преобразование и квантование. Guetzli работает со стадией квантования, в которой, чем больше потеря визуального качества, тем меньше получается файл.
Guetzli пытается найти баланс между потерей в качестве и размером файла, используя поисковой алгоритм, преодолевающий разницу между психовизуальным (т.е. основанным на восприятии оттенков человеком) моделированием формата JPEG и психовизуальной моделью самого сервиса. В компании уверяют, что Guetzli ужимает файлы без значительной потери в качестве, используя более тщательную аппроксимацию изображений, чем большинство других сервисов.
Ниже – пример его работы с изображением 16х16 пикселей. Это – телефонный кабель на фоне голубого неба. Обычно при сжатии таких изображений возникают артефакты. Слева – исходное изображение, справа – изображение, обработанное Guetzli, посредине – обработанное libjpeg. Видно, что у Guetzli меньше артефактов.
Еще один такой же пример, на чуть большем изображении:
Но хотя Guetzli и способен ужимать файлы больше, чем другие существующие методы, использование поискового алгоритма сильно продлевает сам процесс сжатия.
Напомним, ранее мы писали о том, как развитие opensource-сообщества и проектов может повлиять на карьеру программистов в будущем.