Как повернуть все изображения в каталоге с imagemagick?

TorrentFreak имел статью о подобных вещах.

Вы могли проверить VPNCheck.

18
15.05.2016, 09:11
7 ответов

Существует довольно много проблем с Вашим кодом. В первую очередь, Вы анализируете ls, который является Плохой Идеей. Также необходимо обратиться к переменной как $file как Вы указываете, и необходимо также заключить его в кавычки так, это не повредится на пробелах. Вы объявляете num но это никогда не используется. Более безопасный путь был бы:

find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
  convert "$file" -rotate 90 "$file"_rotated.JPG
done

Это будет все еще иметь проблемы, если Ваши файлы будут содержать новые строки, но по крайней мере не повредятся, если Ваш путь содержит пробелы.

Если файлы - все в том же каталоге, он может быть далее упрощен с помощью globbing. Можно также использовать расширение параметра для создания foo_rotated.JPG1 вместо foo.JPG_rotated.JPG:

for file in /tmp/p/DSC*.JPG; do
  convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
20
27.01.2020, 19:45
  • 1
    Ваш метод создаст original_filename.JPG_rotated.JPG". добавление "${file%.JPG}"_rotated.JPG будет более соответствующим, по моему скромному мнению.Удачи! –  Valentin Bajrami 29.09.2013, 20:39
  • 2
    @val0x00ff абсолютно (и я upvoted Ваш ответ, который предлагает это). Я просто повторил точную вещь, OP делал фиксацию более явных ошибок. прохладный –  terdon♦ 29.09.2013, 21:11
  • 3
    ! Я просто изменил Вашу команду немного. –  Valentin Bajrami 29.09.2013, 21:19

Простой метод с помощью PE (Расширение Параметра)

for f in /tmp/p/DSC*.JPG
do
  convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
11
27.01.2020, 19:45
  • 1
    Нужно отметить, что нет ничего bash конкретный там, это - совершенно стандартный POSIX sh синтаксис. пространство –  Stéphane Chazelas 29.09.2013, 22:39

Не анализировать ls и ls не требуется здесь. Кроме того, необходимо заключить переменные в кавычки в случае, если они содержат пробелы.

for file in *.JPG; do
  convert -rotate 90 "$file" rotated_"$file"
done
6
27.01.2020, 19:45
  • 1
    ... или вкладки, или новая строка или звездочка или вопросительный знак или квадратная скобка... –  Stéphane Chazelas 29.09.2013, 22:41

Я должен был обратиться к файлу как $file, т.е.

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 $file+'_rotated'.JPG
done
0
27.01.2020, 19:45

Это не решение imagemagic, но

sips -r 90 *.JPG

поворачивает все изображения, оканчивающиеся на .JPG, на 90 градусов. Это хороший лайнер.

6
27.01.2020, 19:45

mogrify -rotate 90 *.jpg imagemagick

mogrify -rotate 90 /tmp/p/DSC*.JPG - лучший однострочник для поворота всех изображений. действительно повернет все .JPG, начиная с DSC в каталоге p

Mogrify (часть imagemagick) отличается от Convert тем, что изменяет исходный файл http://www.imagemagick.org/script/mogrify.php

11
27.01.2020, 19:45

Вы можете скопировать / вставить этот код в ubuntu и сохранить его как "rotate.sh"

#!/bin/bash -e

CUR_DIR=`pwd`
cd "${1}"

for file in *.jpg; do
    convert "${file}" -rotate 90 "${file}";
done

cd CUR_DIR

После сохранения этого файла запустите его из терминала, используя ./ rotate.sh folder_contain_images

0
27.01.2020, 19:45

Теги

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