Крайне необходимая задача, возникающая в работе каждого верстальщика - это оптимизация графики, нарезанной из psd-макета или используемой в HTML-шаблоне.
Для этой цели существует много разных инструментов, начиная с RIOT и заканчивая утилитами Linux. Но гораздо более удобной возможностью является автоматизация процесса сжатия картинок с помощью плагина под Gulp.
Таким плагином является gulp-imagemin. Он умеет сжимать картинки форматов PNG, JPEG, GIF и SVG. Все остальные (не поддерживаемые) форматы графических файлов просто игнорируются плагином
.1
gulp-imagemin
Установка gulp-imagemin
Установка плагина
стандартная и производиться командой 1
gulp-imagemin
с ключом 1
npm install
для внесения пакета в список зависимостей проекта:1
--save-dev
Создание задачи под gulp-imagemin
После установки плагина
необходимо создать задачу сжатия картинок под этот плагин. Ничего необычного в этом нет и задача создается стандартно. Сначала создаем переменную 1
gulp-imagemin
, в которую помещаем сам плагин 1
imagemin
:1
gulp-imagemin
А затем создаем задачу с произвольным именем
:1
compress
Задачу
можно запускать однократно вручную или автоматически, доверив это дело Gulp и поместив ее внутрь встроенной функции 1
compress
.1
gulp.watch
Создаю в проекте
директорию 1
gulp_test
и размещаю в ней несколько изображений формата 1
images
, но достаточно большого размера:1
.jpg
Цель - проверить, действительно ли происходит сжатие графических файлов. Давайте опробуем работу плагина
однократно, запустив в консоли команду 1
gulp-imagemin
:1
gulp compress
Отлично! Задача
запустилась и выполнилась за 8.56 миллисекунд. При этом было обработано 6 изображений, над которыми была произведена операция сжатия. Экономия размера в результате компресии составила 1
compress
.1
7.2%
Давайте посмотрим на изображения в оригинале, расположенные в директории
:1
images
… запомним примерные размеры каждого из файлов. А затем взглянем на содержимое директории
, в которой располагаются сжатые плагином 1
build/images/
изображения:1
gulp-imagemin
Видно при сравнении, что размер графических файлов, пускай и ненамного, но уменьшился.
Gulp-imagemin - автоматический мониторинг
Давайте доведем нашу задачу до логического завершения и настроим Gulp таким образом, чтобы он автоматически отслеживал добавление в директории
новых изображений.1
images
И как только они появляются там, то немедлено производил бы их сжатие при помощи плагина
.1
gulp-imagemin
Для этого создам задачу мониторинга
:1
watch
… которую добавлю в очередь на выполнение для дефолтной задачи
:1
default
Полностью листниг файла
для данного случая выглядит следующим образом:1
gulpfile.js
Запускаю в консоли команду
, а затем по одному добавлю в директорию 1
gulp
два файла-скриншота, созданных мною для этой статьи.1
images
Видим, что каждый раз, как в директорию
был добавлен файл, Gulp запускал задачу 1
images
на выполнение:1
compress
На выполнение первой задачи ушло 7 миллисекунд:
… на вторую задачу - 2.13 миллисекунд:
При этом я “выиграл”
и 1
7.7%
размера, что скажется на скорости загрузки страницы в браузере. Также обратите внимание, что Gulp продолжает работать, находясь в фоновом режиме.1
8%
Усложним задачу для gulp-imagemin
Можно немного усложнить и усовершенствовать процесс оптимизации изображений. Для этого немного перепишу задачу
таким образом:1
compress
Первое изменение - это добавлена опция
к плагину 1
progressive: true
. Эта опция управляет методом сжатия графических файлов и приведена мною для наглядности примера.1
gulp-imagemin
Второе изменение - изменена директория назначения. Теперь директория-источник изображений
и директория-“выхлоп” 1
gulp.src('images/*')
, куда помещаются обработанные изображения - одна и та же.1
gulp.dest('images/')
Таким образом, достаточно положить в директорию
какое-либо изображение и оно тут же преобразуется в точно такое же изображение, но меньшего размера! Удобно, не правда ли?1
images
На этом все.