QA: Автоматизація компресії зображень
Q: А якщо до імдж компресії? Чи можно автонакидувати термінальні команди?
A: По компресії є кілька методів. Зняв відео, а нижче опис:
1. ImageOptim
На Мак є програма ImageOptim. Пачкою оптимізує будь-яку кількість картинок. Працює на алгоритмі PNGQuant і також доступний, як програма для терміналу.
2. Terminal: optipng, jpegopti, gifsicle, svgo
Є кілька програм оптимізації зображень для термінала:
а) Для PNG є PNGQuant, pngcrush та optipng. Останній також вміє конвертувати BMP, GIF, TIFF у PNG, сайт. На його прикладі і подивимось.
Працює так: оптимізує всі файли PNG у теці
optipng *.png
Або ще отакий :
find . -name '*.png' | xargs optipng -nc -nb -o7 -full
А отак рекурсивно шукає та оптимізує PNG у всіх підтеках:
find . -iname "*.png" -exec optipng -o7 {} \;
б) jpegopti для JPG. Github
Працює так:
jpegoptim -m70 img-name
-m70 — відсоток стискання
в) gifsicle для GIF. Сайт.
Для одного зображення:
gifsicle --batch -V -O2 image-name.gif
Так само рекурсивно шукає та оптимізує GIF у всіх підтеках:
find . -iname "*.gif" -exec gifsicle --batch -V -O2 {} \;
г) svgo для SVG.
Працює так для всіх файлів:
svgo *.svg
Інсталюються всі вони через Homebrew:
brew install optipng
3.1 Automator: quick action
Попередні команди збираємо у окремий bash-скріпт, сценарій для автоматора та сценарій на теку.
Сценарій будується так:
- отримання файлів (у даному випадку всі виділені)
- встановлення хз як змінних для скрипта (Set Value та Get Value)
- запуск bash-скрипта на виділених файлах (Run Shell Script, з налаштуваннями Shell /bin/bash та Pass Input: as arguments)
Завантажити цей сценарій (попередньо треба встановити термінальні команди optipng, jpegopti, pngcrush, svgo).
Сам скрипт:
export PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:$PATH
BIN_PATH=~/Library/Services/.bin
for f in "$@"; do
if [ -d $f ]; then
echo "TODO: nothing to compress now!"
elif [[ $f == *.png ]]; then
if hash optipng 2>/dev/null; then
optipng -o7 "$f"
else
$BIN_PATH/optipng -o7 "$f"
fi
if hash pngcrush 2>/dev/null; then
pngcrush -brute -reduce -ow "$f"
else
$BIN_PATH/pngcrush -brute -reduce -ow "$f"
fi
elif [[ $f == *.jpg ]]; then
if hash jpegoptim 2>/dev/null; then
jpegoptim "$f" --strip-all --force --all-progressive --size=150k
else
echo "No jpegoptim installed, skipped."
fi
elif [[ $f == *.svg ]]; then
if hash svgo 2>/dev/null; then
svgo "$f"
else
echo "No SVGO installed, skipped."
fi
else
echo "TODO: nothing to compress now!"
fi
done;
3.2 Automator: folder action
А на теку попередній сценарій підлаштовується просто з відключеним першим кроком. А на теку попередній сценарій підлаштовується просто з відключеним першим кроком. Завантажити скрипт для теки.
?
Розкажіть, будь ласка, які дії з файлами вам доводиться періодично повторювати? Які рутинні задачі у вас бувають? Мені цікаво, які задачі можливо автоматизувати. Напишіть на пошту або у телеграм. ▶️ Більше у телеграм-каналі «Здоровий глузд» — https://t.me/alexkolodko1
—