1)Утилита ImageMagick
Примеры с https://habr.com/ru/post/261625/:
mogrify -чтотосделать *.jpg
а)convert input.jpg -resize 300 output.jpg
При этом IM берёт input.jpg и изменяет размер на пикселей в ширину, сохраняя результат в output.jpg. Функция -resize 300 – пример одной из множества функций. У них у всех один формат: -functionName option.
Использовать mogrify можно также, с небольшим дополнением:mogrify -path output/ -resize 300 *.jpg
Тут IM берёт все файлы JPEG из текущей директории (*.jpg), изменяет их размер до 300 пикселей в ширину и сохраняет их в директории output.
Функции можно комбинировать:convert input.jpg -resize 300 -quality 75 output.jpg
Это тоже изменяет размер input.jpg до 300 пискелей, но устанавливает качество JPEG в 75 перед сохранением в output.jpg.
б)Протестировав различные изображения разных размеров в форматах JPEG и PNG я пришёл к выводу, что следующие настройки IM создают наименьшие результаты, которые при этом практически неотличимы от выдачи фотошопа:
mogrify -path OUTPUT_PATH -filter Triangle -define filter:support=2 -thumbnail OUTPUT_WIDTH -unsharp 0.25x0.25+8+0.065 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB -strip INPUT_PATH
thumbnail удаляет мета данные, всё-таки она удаляет их не все. Есть возможность удалить все, используя -strip и -define png:exclude-chunk=all. На качество это не влияет.
в)Все описанные до этого настройки я рекомендую, если вы не оптимизируете свои картинки. Если их можно оптимизировать, то: небольшие изменения в настройках -unsharp лучше работают (-unsharp 0.25x0.08+8.3+0.045 супротив -unsharp 0.25x0.25+8+0.065 без оптимизации) и не нужно использовать -strip.
mogrify -path OUTPUT_PATH -filter Triangle -define filter:support=2 -thumbnail OUTPUT_WIDTH -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB INPUT_PATH
г)Оптимизаторы image_optim, picopt, ImageOptim прогоняют картинки через серию разных шагов. Советуют лучше прогнать файлы через все три в том порядке, в каком они приведены. Правда, после использования image_optim выгода от picopt и ImageOptim становится минимальной. Если у вас нет лишнего времени и процессорной мощности, то использование более одной оптимизации будет чрезмерным.
д)
bash shell
Здесь можно добавить функцию-макрос в файл .bash_aliases (или .bashrc), которая будет заменять мою рекомендуемую команду:
smartresize() { mogrify -path $3 -filter Triangle -define filter:support=2 -thumbnail $2 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB $1 }
А вызывать её нужно так:
smartresize inputfile.png 300 outputdir/
Пакетно
find . -iname «*jpg» -print0 | xargs -0 -I{} convert <опции> {} /another/dir/{}