[РЕШЕНО] ImageMagick - холст

Доброго дня
нигде не нашел, люди подскажите бьюсь уже часов 10
нужно увеличить ширину холста если он меньше искомой величины, во всех остальных случаях оставить прежним
для понимания - две картинки 1280х960 и 1687х1195, нужно установить ширину холста не менее 1600, должно получится 1600х960 и 1687х1195, делаю так
find -name '*.jpg' -exec mogrify -gravity center -extent 1600\< {} {} \;
получаю 1600х960 и 1600х1195, т.е. меняет размер у обоих картинок, хотя стоит знак "<"
т.е. синтаксис какой работает для -resize не работает для -extent, перепробовал уже миллион комбинаций, в google ничего не нашел
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
Машине нужно четко объяснить, в каком случае нужно менять размер ....
Я бы объяснил ей, используя identify
Начальное условие - считаем, что разрешение изображения AxB имеет вид aaaaxbb... , т. е. A 4-х значное число
- считываем параметр aaaa
A=$(identify /paht/to/file | awk '{print $3}' | cut -b 1-4)
если A меньше 1600 то изменяем ....
Ошибки не исчезают с опытом - они просто умнеют
vasek
если A меньше 1600 то изменяем
как это записать через identify?
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
palpalych
как это записать через identify?
Используем identify только чтобы объяснить машине, что действию подлежат изображения с А<1600 - а для изменения размера используй обычный способ.
Лучше в скрипт, что бы не городить многоярусную конструкцию. Но если хочешь в одну строку, советую сначала отработать на скрипте, а уж потом переложить в одну строку ...
Ошибки не исчезают с опытом - они просто умнеют
как написать все то же самое
find -name '*.jpg' -exec mogrify -gravity center -extent 1600\< {} {} \;
только обернуть это в if
т.е. если ширина меньше Х то выполнять?
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
Вот что в скрипт получилось засунуть
#!/bin/bash
for f in *.jpg
do
    if [ 1600 -gt $(identify -format "%w" "$f") ]; then
        mogrify -gravity center -extent 1600 $f
    fi
done
теперь в одну строку засунуть нужно...
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
В итоге остановился на этом варианте
identify -format '%w %h %i\n' *.jpg | awk '$1 < 1600 {sub(/^[^ ]* [^ ]* /, ""); print}' | tr '\n' '\0' | xargs -0 mogrify -gravity center -extent 1600
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
Нифига, ни тот ни другой вариант не подходят, вложенные папки не находят, думаем дальше...
Арчи ~]$ ...as always want ready-made solutions that would make even tastier
palpalych
find -name '*.jpg' -exec mogrify -gravity center -extent 1600\< {} {} \;
Ошибки в тексте-неповторимый стиль автора©
palpalych
нужно увеличить ширину холста если он меньше искомой величины, во всех остальных случаях оставить прежним
Без условия не обойтись ...
palpalych
Нифига, ни тот ни другой вариант не подходят, вложенные папки не находят...
Лучше использовать встроенную возможность findрекурсивный обход каталогов.
И лучше использовать скрипт - я бы сделал это примерно так - используя find получил бы список файлов/изображений нужного расширения (jpg и др.), далее читая построчно этот файл выбирал бы нужные файлы (нужного размера) и выполнял бы увеличение их размера до нужного.
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.