Как уменьшить тысячи картинок во всех подпапках?

Есть сайт на WordPress и там есть куча картинок, которые хотелось бы ужать по качеству до 60-70%. Да и по размеру быть может.

Они лежат в кусе подпапок по месяцам и годам. Есть в распоряжении ПК на Linux и MacBook Pro, то есть вся мощь консолей к моим услугам.

Как и чем лучше "перебрать" все папки и обжать все в них? Я умею только в одной папке все пережимать.
  • Вопрос задан
  • 12401 просмотр
Решения вопроса 1
sim3x
@sim3x
Нужны пакеты
sudo apt-get install jpegoptim imagemagick optipng
mogrify

бекапимся
все будет происходить на месте - файлы заменяются
начиная с текущей папки и далее в глубину

Оптимизируем jpeg
find . -type f \( -name "*.jpeg" -or -name "*.jpg" \) -exec mogrify -resize x100 -quality 90 {} \; -exec jpegoptim -o --strip-all {} \;


Оптимизируем png
find . -type f -name "*.png" -exec mogrify -resize x100 {} \; -exec optipng -o1 {} \;


mogrify -resize ШИРИНАxВЫСОТА -quality КАЧЕСТВО
если высоты(ширины) нет, то изменяем пропорционально

optipng -o9 file.png
максимальное количество проходов по изображению, очень эффективно для запущенных случаев, очень-очень долго
пару минут на файл 1500х1500

optipng -o5 file.png
просто долго

# код предоставляется как есть

# почему оптипнг - он офигительный

# для других типов картинок меняем find и ищем каким софтом их оптимизируют
Также можно сконвертить картинки в пнг-жпг, но часто это как-то нужно синхронизировать с бд, и тут нет простого пути
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
yum install jpegoptim
или
apt-get install jpegoptim
ну и собственно сам процесс
find /home/bitrix/ext_www/shop.wildorchid.ru/-type f -regex ".*\(jpg\|jpeg\|JPG\|Jpeg\)" -exec jpegoptim -t --max=85 {} \;
Ответ написан
Комментировать
GavriKos
@GavriKos
Питон +ImageMagic.
Ответ написан
Комментировать
Как и чем лучше "перебрать" все папки и обжать все в них? Я умею только в одной папке все пережимать.


Ну, если так, то проблем быть не должно. Просто рекурсивно обходите дерево каталогов.
Скажем, пишете функцию compressFolder(folder), которая будет сжимать содержимое каталога, переданного в параметре. В ней перебираете все содержимое, по следующему принципу: если это изображение — сжимаете (вы же умеете), а если это папка (допустим, путь к ней записывается в folder_i), то вызываете compressFolder(folder_i). Таким образом осуществляется рекурсивный обход дерева каталогов.

PS: да, вариант @sim3x куда интереснее.
Ответ написан
Комментировать
Может быть не пережимать ничего а использовать Nginx Image Filter Module?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы