Как изменить размер только изображений missized?

Самый легкий способ сделать это состоял бы в том, чтобы, вероятно, использовать хеши Perl:

perl -e '
    for (<*.jpg>){
        $date = substr($_,0,10);
        $counts{$date}++;
        rename $_ => "$date-".sprintf "%03d",$counts{$date}.".jpg";
    }
'

Осторожный, тем не менее, этот код не тестируется. Попробуйте его на фиктивных файлах сначала.

2
25.10.2014, 17:15
2 ответа

Можно надеяться, что

convert in.jpg -resize "448x336!" out.jpg

не касается файла, если размер уже правильно?
Неучебно не - но думая о том, как работает формат imageMagic командной строки, что неудивительно.

Итак, измерения изображения каждого файла должны быть проверены в первую очередь. Теперь мы хотим использовать ImageAmagic, которая имеет команду для этой цели ;

identify -format "%wx%h\n" file.jpg

показывает только размер в формате wxh , как 448x336 .

Мы хотим изменять размер, если размер не 448x336 . В этом случае мы используем Convert , чтобы изменить размер 448x336 - мы должны сообщить Convert , что мы хотим изменять изменение изменений, даже если это означает изменение соотношения сторон в силу Изображение к новым габаритам - мы делаем это, добавив ! Как вариант / флаг в спецификации размера:

convert in.jpg -resize "448x336!" out.jpg

Размеры нам нужны. Но у нас нет фиксированного имени файла для вывода. Давайте возьмем исходное имя и вставьте -RES -RES до .jpg .jpg . In-res.jpg :

convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"

Используем команду Проверять каталоги за « .jpg изображения - или" .jpg ". Определите деталь , выполняются в оболочке для использования команды , [...] . Я также использую оболочку для команды Convert , которая работает, если первая -Exec действие (не вариант) вспомнил. В этом случае это только для того, чтобы запустить вторую команду после размера, показывая сообщение для каждого файла изменений.

find  . -type f -iname "*.jpg" -exec bash -c \
    '[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \;  -exec bash -c \
    'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
    "%[filename:path]" ; echo "Resized {}"' \; 

Вместо второго Bash , можно использовать простыню -Exec Convert ... , и добавить новое действие, вроде -Print или -Ls , чтобы показать имена измененных файлов.

Команда является одной строкой технически (показана с линиями продолжения, чтобы избежать прокрутки).
И, после этого объяснения, как-то я чувствую, что линия все еще не легко читать ...

3
27.01.2020, 21:54

Файлы шириной 720 пикселей можно найти с помощью команды:

identify -format '%w %i\n' *.jpg | awk '/^720/ {print $2}'

Возможно использовать этот вариант, если файлов действительно много, что может привести к расширению *.jpg, чтобы выдать страшную ошибку "список аргументов слишком длинный":

find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}'

С помощью этого списка можно изменить размер этих файлов, например:

find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}' | xargs -I {} convert -resize 488x336! {} {}

Восклицательный знак ! после 488x336 заставляет новое изображение быть именно такого размера; без него сохраняется пропорции и заданный размер является максимальными размерами для ширины и высоты.

3
27.01.2020, 21:54

Теги

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