exifデータに基づいて画像を自動的に回転させる方法


31

カメラ(Olympus E-520)で写真を作成すると、EXIFデータに方向が保存されます。

Ubuntuの標準の画像ビューアは、この画像を正しく表示しています。ただし、Windowsビューアはそうではありません。

Ubuntuでバッチでこの画像を本当に回転させる方法はありますか(EXIFによると必要な場合)?たとえば、ImageMagickツールを使用しますか?

回答:


37

exiftranそしてJHeadは(jhead -autorotこれを行うことができます。exiftranロスレスでこれを行うことができますjhead


1
exiftranはまさに私が必要なもののように見えます!
ピータースミット

3
jhead -autorotはjpegtranを呼び出し、完全にロスレスの回転を行うことができます。IJGのロスレスなものをすべて忘れていました。 jpegclub.org/losslessapps.html Exiftranはロスレスローテーションを行うこともできます。画像ファイル内のexif情報を尊重するため、jpegtranよりも優れています。ただし、場合によっては(詳細についてはよくわかりませんが)ロスレスで回転できないことに注意してください。したがって、jheadを使用して必要な回転を識別するスクリプトを実装する場合(以前と同様ですが、すべての回転を処理するcaseステートメントを使用)、損失のある回転へのフォールバックをサポートする必要があります。
オペロ

1
exiftran -a(exif方向タグに基づく自動回転)を使用していくつかのテストを行ったところ、非常にうまく機能しているようです。ロスレス回転に関しては、実行された回転の逆を実行して元の画像を取得できませんでした。例:exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; 1.jpgと3.jpgのmd5sumは同じではありません。(Araxisマージバイナリ比較を使用して)詳細に検査すると、異なるのはexifヘッダー情報だけである場合もあれば、ファイルの主要な変更である場合もありました。ただし、Araxis mergeの画像比較では、未変更のピクセルは示されませんでした。
opello

私はピクセルを変更しないことを意味しました(それらはピクセルが同一の画像でした)。また、stackoverflow / superuserプロトコルについてはわかりませんが、適切なツールを推奨するためにdmityugovがこれを取得すべきだと思います。
オペロ

1
exiftranがファイルから一部のメタデータを削除できることがわかりました。たとえば、Samsung Galaxy S2で撮影された画像にはタイムスタンプフィールド(EXIF以外の場合があります)があり、exiftranはそれを削除します。exiftran -aは、回転を必要としない画像も変更します。jhead -autorotには両方の問題がありません。OTOH、ファイルmtimeを保持するオプションがありません(ただし、回避策として-ftスイッチがあります)。
pfalcon

12

ImageMagickの変換ツールには、ジョブを完了するための-auto-orientフラグがあります。

#!/bin/bash

JHEAD=jhead
SED=sed
CONVERT=convert

for f in *.jpg
do
        orientation=$($JHEAD -v $f | $SED -nr 's:.*Orientation = ([0-9]+).*:\1:p')

        if [ -z $orientation ]
        then
                orientation=0
        fi

        if [ $orientation -gt 1 ]
        then
                echo Rotating $f...
                mv $f $f.bak
                $CONVERT -auto-orient $f.bak $f
        fi
done

現在のディレクトリの* .jpgを反復処理する簡単なスクリプトをまとめました。これを簡単に変更して、パス($ 1)または必要なものを取り込むことができます。


1
すばらしいです!私が見つけられなかったもの。mogrifyで使用して、画像のバッチを作成します。1つの質問だけです。変更する必要がない場合でも、なぜすべての画像を書き換えるのですか?(ハッシュは異なります)
ピータースミット

理由はわかりませんが、イメージdiffとバイナリdiffの両方を完全に再エンコードするようです。
オペロ

うわー、これは素晴らしいです。どうもありがとう。他に非常に良い答えが追加されない場合、私は確実にこれを受け入れます。
ピータースミット

2

それにはXnViewを使用できます。XnViewを使用してバッチモードで自動回転を行う方法については、次のページをご覧ください。

Windowsでは、IrfanViewを使用してそれを行うことができます。IrfanView WebサイトのFAQセクションから:

Q:バッチモードでJPGロスレス操作(回転、IPTC、コメント)を使用する方法は?

A:サムネイルウィンドウを開き、JPGを含むフォルダーを開き、多数のJPGを選択し、サムネイルメニューでJPGロスレス操作のファイル->選択したサムを使用したロスレス変換を確認します。注:自動回転オプションは、EXIF方向タグが適切に保存されている場合にのみ機能します(左上ではありません)。


1

ImageMagickでは、mogrifyを使用してファイルを回転し、回転した画像を元のファイル名に書き戻すこともできます。

mogrify -auto-orient *.jpg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.