Rose debug info
---------------

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