


Средства онлайн оптимизации. Алгоритмы уменьшения изображений
На данный момент существуют два сервиса, которые можно рекомендовать к использованию: принадлежащий «Yahoo!» сервис «Smush.it» (http://smush.it) и «punypng» (http://punypng.com), который разрабатывает Конрад Чу. И тот и другой оптимизируют все три общепринятых формата, статичные GIF с большой вероятностью будут сконвертированы в PNG с индексированной палитрой (если такое преобразование даст выигрыш в размере).
На данный момент «punypng» оптимизирует изображения лучше, в частности, из-за использования более современных утилит для оптимизации PNG («Smush.it» использует устаревший «pngcrush» в режиме полного перебора) и техники, описанной в подглаве 3.3.10, для удаления лишнего из польностью прозрачных областей. Впрочем, ситуация ещё может измениться.
Тестовая таблица с блога «Gracepoint After Five» (http://www.gracepointafterfive.com/punypng-benchmarks) с результатами оптимизации девяти PNG-файлов обоими онлайн-сервисами и двумя популярными утилитами оптимизации PNG:

Помимо веб-интерфейса, сервисы предоставляют API. На данный момент, компания «Yahoo!» закрыла API для публичного использования, но им вс? ещ? можно воспользоваться. API «punypng» находится в стадии закрытого бета-тестирования (и может измениться), Конрад Чу любезно согласился предоставить нам доступ к тестовой версии.
Для того, чтобы произвести оптимизацию изображения через API, вам нужно разместить его где-нибудь в интернете и узнать его URL. Именно URL используется в качестве источника данных. В обоих сервисах входные данные представлены как GET-параметры, а ответ производится в формате JSON.
Smush.it
URL, на который нужно обратиться: http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.phpПараметры: img — URL изображения, которое нужно оптимизировать id — необязательный параметр, передаётся в ответ без изменений, может быть использован для любых ваших целей callback — необязательный параметр, имя функции JavaScript, которая будет вызвана (в качестве параметра ей будет передан JSON-объект)
Пример успешного запроса: http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.php?img=http://www.publicdomainpictures.net/pictures/2000/nahled/1-1222847524s7rl.jpg
{ "src":"http:\/\/www.publicdomainpictures.net\/pictures\/2000\/nahled\/1-1222847524s7rl.jpg", "src_size":50219, "dest":"http:\/\/smushit.zenfs.com\/results\/3144140b\/smush\/pictures%2F2000%2Fnahled%2F1-1222847524s7rl.jpg", "dest_size":49198, "percent":"2.03" }
Все поля достаточно очевидны, в поле «dest» указан адрес, где можно скачать оптимизированное изображение.
Пример вызова, порождающий ошибку: http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.php?img=http://bolknote.ru/imgs/2009.09.29.jpg
Такой запрос верн?т следующий ответ:
{ "src":"http:\/\/bolknote.ru\/imgs\/2009.09.29.jpg", "src_size":148529, "error":"No savings", "dest_size":-1, "id":"test" }
Текст ошибки говорит о том, что «Smush.it» не смог оптимизировать изображение. Другими причинами возникновения ошибочной ситуации могут быть, например, слишком большое изображение (более одного мегабайта) или несуществующий адрес.
Punypng
После того как автор закончит бета-тестирование API, получить доступ к нему можно будет, зарегистрировавшись на сайте и получив сорокобитный ключ доступа, который нужно будет указывать при запросах на оптимизацию. В профиле, кстати, можно указать нужно ли удалять из ваших файлов информацию EXIF.Интересной особенностью сервиса является возможность пакетной обработки — оптимизированные изображения можно скачать единым ZIP-архивом.
URL, на который нужно обратиться: http://www.gracepointafterfive.com/punypng/api/optimize
Параметры: img — URL изображения для оптимизации key — ваш ключ для доступа group_id — необязательный параметр, идентификатор группы (может быть выбран произвольно) для пакетной обработки файлов
Пример успешного запроса: http://www.gracepointafterfive.com/punypng/api/optimize?img= http://www.conradchu.com/images/portfolio/targets.gif &key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Запрос вернёт следующий ответ:
{ "original_url": "http://www.conradchu.com/images/portfolio/targets.gif", "original_size": 35071, "optimized_size": 27922, "optimized_url":"http://www.gracepointafterfive.com/punypng_staging/attachments/514367d961c0c9c5ef80e02cc3381660b24d77d8/targets.gif.png", "group_id": null, "savings_percent": 21, "savings_bytes": 7149 }
Оптимизированное изображение, как видно, доступно по адресу, указанному в поле «optimized_url». Если вы использовали пакетный режим (то есть указали параметр «group_id» в запросе), то ZIP-файл с оптимизированными изображениями можно скачать по URL http://www.gracepointafterfive.com/punypng/api/download_zip?group_id=группа
Ключ для скачивания архива не требуется.
Пример запроса, порождающего ошибку: http://www.gracepointafterfive.com/punypng /api/optimize?img=http://libpng.org/pub/png/img_png/pnglogo-grr.png&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Запрос верн?т следующий ответ:
{ "error": "Sorry, the max file size supported is 150KB." }
В настоящее время максимальный размер файлов ограничен в 150КБ, количество файлов для пакетной обработки не может быть больше пяти, а количество изображений, обрабатываемых за день, не может быть более 50. Автор планирует запуск платной версии, где ограничения можно будет снять.