Ускоряем сайт: чистим изображения

16 нояб. 2009 г. | | |

Трудно себе представить сайт без картинок. А, между прочим, картинки, после видео и звука, самая "тяжелая" часть сайта. Поэтому мы поговорим об уменьшении размера картинок без потери качества. Пакет утилит (jpegtran, pngout, pngrewrite, pngcrush, optipng), рассмотренных в статье, можно скачать отсюда.
И так, разберемся для начала с форматом PNG.
Для чистки png-файлов существует несколько утилит:
Pngout
Pngcrush
Pngrewrite
Optipng
Возьмем для примера утилиту pngout. Туториал по работе с ней находится тут http://advsys.net/ken/util/pngout.htm.
После банального прогона картинки (с опцией /k0, которая удаляет ненужные фрагменты из файла) утилиткой имеем следующие результаты:
Неплохо, правда? Утилита имеет множество параметров, которые позволяют более гибко оптимизировать изображения.
Теперь возьмемся за JPEG.
Зачастую JPEG-файлы содержат некоторое количество метаданных, которые включают:
1) комментарии
2) метаданные, нужные для приложения (например, для Photoshop)
3) EXIF-информацию, например, от фотоаппарата, которая может содержать дату фотографии и даже небольшое превью или аудио-запись!
Согласитесь, вряд ли нам все это нужно для использования картинки на сайте. А ведь все это лишние байты-килобайты :) ! Весь этот мусор можно совершенно безопасно удалить безо всякой потери качества (с учетом того, что jpeg-картинка теряет качество после каждого сохранения) отображения каждого конкретного пиксела. Для этого воспользуемся утилиткой jpegtran. Запускаем из командной строки

jpegtran -copy none -optimize -progressive img.jpg imgoptim.jpg
и получаем следующий результат:
Из картинки весом 21 Кб мы получили такую картинку такого же качества, только почти в 4 раза меньше размером!
Еще у нас есть GIF-формат. Советую его переводить в PNG, а потому ужимать описанными выше утилитами.
Ну и напоследок, учитывая, что все люди немного ленивы - да и просто неудобно десятки файлов вручную чистить - приведу скрипт (ложится в bat-файл), который автоматизирует чистку файлов в какой-то папке.
for %%f in (*.png) do pngout /k0 %%f
for %%f in (*.jpeg, *.jpg) do jpegtran -copy none %%f %%f
З.Ы. Спасибо за дельные советы Artri ;)

0 коммент.:

Отправить комментарий