Skip to content

Instantly share code, notes, and snippets.

@vyach-vasiliev
Created March 4, 2021 09:05
Show Gist options
  • Save vyach-vasiliev/149dca435885ac4efc90e088696c96ba to your computer and use it in GitHub Desktop.
Save vyach-vasiliev/149dca435885ac4efc90e088696c96ba to your computer and use it in GitHub Desktop.
Скрипт оптимизации изображений

source: https://blog.upagge.ru/posts/snippet/2021/shell-script/image-optimization/ author: Struchkov Mark

Я заморочился оптимизацией блога, и неотъемлемой частью этого процесса является сжатие изображений. Для автоматизации процесса накидал shell script.

Работает очень просто:

  1. Сначала проверяется наличие файла-флага. Он позволяет находить только новые файлы и не тратить время на обработку уже сжатых картинок (см документацию find -newer)
  2. Так как optipng, advpng, pngcrush и jpegoptim не поддерживают рекурсивную обработку файлов, то используем команду find для рекурсивного поиска изображений в папках.
  3. Сжимаем изображения. 3.1 Дополнительной опцией является параметр ignore. В моем случае я игнорирую папку с темой Hugo.
  4. Перезаписываем файл-флаг.

В результате исходные изображения перезаписываются сжатыми.

#!/bin/bash
ignore=themes
file=script-cicd/image-optimization/optimg.flag
if [ -f "$file" ]; then
option="-newer $file"
fi
find . -type f $option -not -path "./$ignore/*" -iname "*.png" -exec optipng -o7 {} \;
find . -type f $option -not -path "./$ignore/*" -iname "*.png" -exec advpng -z4 {} \;
find . -type f $option -not -path "./$ignore/*" -iname "*.png" -exec pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow {} \;
find . -type f $option -not -path "./$ignore/*" -iname "*.jpeg" -exec jpegoptim --all-progressive --strip-all {} \;
find . -type f $option -not -path "./$ignore/*" -iname "*.jpg" -exec jpegoptim --all-progressive --strip-all {} \;
touch $file
echo "$(date)" > $file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment