동일한 해상도의 JPEG 이미지가 많이 있습니다. imagemagic이나 gimp의 그래픽 인터페이스에서 각각을 열려면 시간이 오래 걸립니다.
각 사진을 회전하고 동일한 파일 이름으로 저장하는 방법은 무엇입니까?
답변1
convert
다음 명령을 사용할 수 있습니다 .
input.jpg 변환 - 회전<각도(도)>출력.jpg
시계 방향으로 90도 회전:
convert input.jpg -rotate 90 out.jpg
동일한 이름으로 파일을 저장하려면:
convert file.jpg -rotate 90 file.jpg
모든 파일을 회전하려면:
for photo in *.jpg ; do convert $photo -rotate 90 $photo ; done
또는 다음을 사용할 수 있습니다.mogrify
권장되는 명령줄 도구(가장 좋은 도구)@돈-크리스티:
mogrify -rotate 90 *.jpg
답변2
답변3
다른 두 답변은 EXIF 방향에 따라 다른 결과를 제공할 수 있습니다. convert
EXIF 방향을 기준으로 회전한 것처럼 보이지만 jpegtran
EXIF 방향을 무시합니다.
이 관찰을 통해 실제로 EXIF 방향을 폐기해야 한다는 사실을 알게 되었기 때문에 exiftool
더 이상의 데이터 손실 없이 EXIF 데이터만 폐기하곤 했습니다(이 역시 jpegtran
옵션이 지정되지 않은 경우 수행되는 작업인 것 같습니다).-rotate
exiftool -all= -o outfile.jpg infile.jpg
EXIF 방향을 직접 삭제할 수 있어요
exiftool -Orientation= -o outfile.jpg infile.jpg
아니면 수정하세요
exiftool -n -Orientation=1 -o outfile.jpg infile.jpg
(후자의 경우에는 다음을 읽어야 합니다.자주 묻는 질문-n
값을 변환하는 데 필요한 옵션을 이해하고exiftool
-Orientation
EXIF 태그 테이블).
답변4
이것은 오래된 질문이지만 이 작업에 대한 해결책을 찾다가 발견했습니다.
문제는 jpegtran
이미지를 회전하지만 EXIF 헤더 데이터를 모두 버린다는 것입니다.
exiftool
유지는 되지만 사용하기가 그리 편리하지는 않습니다.
그래서 EXIF 헤더를 유지하면서 JPEG 이미지를 90° 회전시키는 작은 스크립트를 작성했습니다. 어쩌면 누군가가 이것이 유용하다고 생각할 수도 있습니다.
#!/bin/bash
orientation=$(exiftool -n -Orientation "$1")
if [[ "$?" != "0" ]]; then
exit 1
fi
orientation=${orientation##*: }
if [[ "$orientation" == "1" ]]; then
# 1 = Horizontal (normal)
target="6"
elif [[ "$orientation" == "6" ]]; then
# 6 = Rotate 90 CW
target="3"
elif [[ "$orientation" == "3" ]]; then
# 3 = Rotate 180
target="8"
elif [[ "$orientation" == "8" ]]; then
# 8 = Rotate 270 CW
target="1"
else
echo "Can't process orientation \"$orientation\""
exit 1
fi
extension=${1/*./}
backup="${1%$extension*}orig.$extension"
mv "$1" "$backup" || exit 1
exiftool -n -Orientation=$target "$backup" -o "$1"