
У меня есть куча изображений в папке:
images/image1.jpg
images/image2.jpg
...
Эти изображения не оптимизированы для Интернета.
Просто интересно, есть ли команда Linux для массовой оптимизации этих изображений всего за один шаг?
ОБНОВЛЯТЬ: Мне нужно сделать две вещи для каждого изображения:
если ширина изображения больше 900 пикселей, то уменьшите ширину до 900 пикселей (сохраняя пропорции)
сохраните файл с более низким качеством, скажем, 70% от оригинала.
решение1
УстановитьImageMagick:
sudo apt-get install imagemagick
И используйте convert
команду следующим образом:
mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done
решение2
Если у вас много файлов и вы хотите сделать это быстро, вы также можете воспользоваться параллельной программой:
sudo apt install imagemagick parallel
И далее следующее:
find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
-set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'
Давайте разберемся:
find
-- искать файлы.
-- в текущем каталоге\( -name '*.jp*g' -o -name '*.png' \)
-- которые являются файлами формата png или jpeg (оба расширения — «jpg» и «jpeg» — являются распространенными!)-a ! -name '*.min.*'
-- и пропускать файлы, которые уже свернуты-type f
-- и являются реальными файлами, а не символическими ссылками или странно названными каталогами-print0
-- вывести эти файлы, разделив их нулевым байтом (чтобы пробелы не мешали работе)
parallel
-- прочитать предыдущую команду и выполнить эту команду параллельно для каждого элемента-0
-- каждый элемент отделен нулевым байтомconvert {}
-- вызовите программу imagemagick "convert", заменив имя файла на{}
resize '>900x' -quality '70%'
-- измените размер изображения до максимального значения 900 пикселей по оси x и измените качество jpeg до 70%.Естьмногодругие возможные варианты здесь.-set filename:newname "%d/%[basename].min.%[extension]"
-- создайте переменную с новым именем файла.Все допустимые значения см. в документации..%d
-- каталог, в котором находится файл%[basename]
-- имя файла без каких-либо расширений%[extension]
-- исходное расширение файла
"%[filename:newname]"
-- имя выходного файла, которое мы настроили на предыдущем шаге