Як обертати всі зображення в каталозі за допомогою Imagemagick?


Відповіді:


20

З вашим кодом існує досить багато проблем. Перш за все, ти розбираєш ls, що є поганою ідеєю . Ви також повинні посилатися на змінну, $fileяк ви вказуєте, і ви також повинні цитувати її, щоб вона не ламалася на пробіли. Ви декларуєте, numале він ніколи не використовується. Більш безпечним способом було б:

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

Це все ще матиме проблеми, якщо ваші файли містять нові рядки, але, принаймні, не порушуються, якщо ваш шлях містить пробіли.

Якщо всі файли в одному каталозі, це можна додатково спростити за допомогою глобулінгу. Ви також можете використовувати розширення параметрів для створення foo_rotated.JPG1замість foo.JPG_rotated.JPG:

for file in /tmp/p/DSC*.JPG; do
  convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done

2
Ваш метод створить original_filename.JPG_rotated.JPG". додавання "${file%.JPG}"_rotated.JPG буде більш підходящим. Ура!
Валентин Байрамі

1
@ val0x00ff абсолютно (і я підтримав вашу відповідь, що говорить про це). Я просто повторив саме те, що робив ОП, виправляючи більш очевидні помилки.
terdon

круто! Я трішки змінив твою команду.
Валентин Байрамі

11

mogrify -rotate 90 *.jpg Кращий One-Liner для обертання всіх зображень за допомогою Imagemagick

mogrify -rotate 90 /tmp/p/DSC*.JPG буде Infact обертатися все .JPGпочинається з DSCв pкаталозі

Mogrify (частина Imagemagick ) відрізняється Convertтим, що він змінює вихідний файл http://www.imagemagick.org/script/mogrify.php


11

Простий метод, що використовує PE (параметри розширення)

for f in /tmp/p/DSC*.JPG
do
  convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done

1
Слід зазначити, що в цьому немає нічого bashконкретного, це ідеально стандартний синтаксис POSIX sh.
Stéphane Chazelas

6

Не розбирайтеls і lsтут не потрібно. Крім того, слід навести свої змінні, якщо вони містять пробіли.

for file in *.JPG; do
  convert -rotate 90 "$file" rotated_"$file"
done

простір ... або вкладки, або новий рядок, або зірочка, або знак питання, або квадратний кронштейн ...
Stéphane Chazelas

6

Не ємагегічне рішення, але

sips -r 90 *.JPG

буде обертати всі зображення, що закінчуються на .JPG на 90 градусів. Це гарний лайнер.


1
Fwiw, це перезапис оригінальних зображень.
don_crissti

0

Мені потрібно було посилатися на файл як $file, тобто

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 $file+'_rotated'.JPG
done

0

Ви можете скопіювати / вставити цей код в 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_containing_images

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.