imagemagick을 사용하여 디렉토리의 모든 이미지를 회전하는 방법은 무엇입니까?

imagemagick을 사용하여 디렉토리의 모든 이미지를 회전하는 방법은 무엇입니까?

패턴과 일치하는 디렉토리의 모든 이미지를 회전하고 싶습니다.

지금까지 나는 다음을 가지고 있습니다 :

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

그러나 이것은 출력을 제공하지 않습니까?

답변1

mogrify -rotate 90 *.jpg 모든 이미지 회전을 위한 더 나은 One-Liner이미지 매직

mogrify -rotate 90 /tmp/p/DSC*.JPG.JPG실제로 다음으로 시작하는 디렉토리의 모든 항목을 회전합니다 .DSCp

모그리피(imagemagick의 일부) Convert는 원본 파일을 수정하는 것과 동일하지 않습니다http://www.imagemagick.org/script/mogrify.php

답변2

코드에 많은 문제가 있습니다. 먼저, 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

답변3

PE(매개변수 확장)를 사용하는 간단한 방법은 다음과 같습니다.

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

답변4

imagemagic 솔루션은 아니지만,

sips -r 90 *.JPG

.JPG로 끝나는 모든 이미지는 90도 회전됩니다. 이것은 훌륭한 하나의 라이너입니다.

관련 정보