2.17.2.6. Оптимізація зображень
Оптимізувати зображення можна декількома способами:
- Без зміни вихідних файлів — файли перетворюються сервером на льоту.
- Зі зміною вихідних файлів — файли перетворюються заздалегідь за допомогою спеціалізованих утиліт.
Без зміни вихідних файлів
Оптимізація зображень на льоту без зміни вихідних файлів можлива за допомогою наступних опцій модуля PageSpeed:
- inline_images — вбудовування невеликих зображень безпосередньо в HTML у вигляді data: URL (скорочує кількість запитів до сервера).
- recompress_images — видалення надлишкової інформації з зображень (метадані та колірні профілі ICC) і перетворення їх у найбільш підходящий формат (включає в себе конвертацію у формат WebP, якщо браузер клієнта його підтримує) (прискорює завантаження зображень).
- resize_images — зменшення зображень до розміру, в якому вони відображаються на сторінці (прискорює завантаження зображень).
Зі зміною вихідних файлів
Увага!
Перед виконанням дій обов'язково створіть резервну копію сайту на випадок, якщо щось піде не так.На серверах хостингу за замовчуванням доступні утиліти для оптимізації файлів зображень популярних форматів:
- GIF: gifsicle.
Їх можна використовувати безпосередньо через консоль або створити власний скрипт, який буде звертатися до них і виконувати необхідні операції. Є багато готових скриптів для оптимізації зображень, які представляють собою набір команд для перерахованих утиліт.
Готовий скрипт
Увага!
Скрипт некоректно працює з файлами з кирилицею в назві.- Або в каталог, вказаний після ключа
-o. - Або в підкаталог
outputпоточного каталогу, якщо ключ-oне був вказаний.
Для оптимізації файлів JPG/JPEG і PNG можна використовувати такий Bash-скрипт.
Завантаження та запуск скрипта виконується командами:
wget https://gist.githubusercontent.com/lgiraudel/6065155/raw/24f667559eee61dd00a99a9940e06b46a125d3ec/optimize.sh
sh optimize.sh -i ~/example.com/images/input -o ~/example.com/images/output
Параметри:
-iабо--input— каталог з вихідними зображеннями.-oабо--output— каталог, в якому будуть збережені всі оптимізовані зображення.-qабо--quiet— відключення виведення інформації в процесі роботи.-sабо--no-stats— відключення виведення статистики про розміри.-hабо--help— виведення довідки за вказаними ключами.
Утиліти
pngcrush опції вихідний_файл.png оптимізований_файл.png
Варіанти використання утиліти:
- Максимальне стиснення без втрати якості:
pngcrush -rem alla -rem text -reduce -brute вихідний_файл.png оптимізований_файл.png - Оптимізація файлів у каталозі без переміщення:
for file in ~/example.com/www/images/*.png ; do pngcrush -reduce -brute -rem alla -rem gAMA -rem cHRM -rem iCCP -rem sRGB "$file" "${file%.png}-crushed.png" && mv "${file%.png}-crushed.png" "$file" ; done- Замість
example.com/www/imagesвкажіть шлях до каталогу з зображеннями. Зверніть увагу, оптимізація не проводиться рекурсивно по всіх каталогах, а обмежується тільки вказаним. - Кінцевий оптимізований файл замінить вихідний.
Детальна інформація щодо роботи з утилітою:
pngcrush --help
- PNG
- BMP
- GIF
- PNM
- TIFF
Оптимізація окремого зображення (файл зображення буде замінений оптимізованою версією):
optipng ~/example.com/www/images/image.png
Оптимізація всіх зображень у певному каталозі:
find ~/example.com/www/images/ -iname *.png -print0 | xargs -0 optipng -o7
- Замість
example.com/www/images/вкажіть шлях до каталогу зображень. - Замість
*.pngвкажіть потрібний формат файлів у вигляді*.bmpабо інші.
Детальна інформація щодо роботи з утилітою:
optipng --help
Оптимізація GIF-анімації з втратою якості:
gifsicle -03 --lossy=80 -o оптимізований_файл.gif вихідний_файл.gif
- Для вказання ступеня стиснення потрібно змінити значення параметра
–lossy=XX.
Детальна інформація щодо роботи з утилітою:
gifsicle --help
Популярні способи використання утиліти:
- Оптимізація окремого зображення:
jpegoptim image.jpg- Оптимізація всіх файлів
.jpgв каталозі:jpegoptim ~/example.com/www/images/*.jpg- Замість
example.com/www/images/вкажіть шлях до каталогу зображень.
- Видалення всіх метаданих зображення:
jpegoptim image.jpg --strip-all - Перетворення в прогресивний JPEG:
jpegoptim image.jpg --all-progressive - Оптимізація зображення з втратою якості:
jpegoptim -m85 image.jpg- Для керування рівнем якості оптимізованого зображення потрібно змінити значення ключа
-mXX.
Детальна інформація щодо роботи з утилітою:
jpegoptim --help
Популярні способи використання утиліти:
- Оптимізація окремого зображення:
jpegtran -copy none -optimize -outfile оптимізований_файл.jpg вихідний_файл.jpg- Видалення метаданих зображення здійснюється за допомогою ключа
-copy none.
- Оптимізація та перетворення в прогресивний JPEG:
jpegtran -copy none -optimize -progressive -outfile оптимізований_файл.jpg вихідний_файл.jpg
Детальна інформація щодо роботи з утилітою:
jpegtran --help