(2022-07-28 初稿 - 2023-06-06 修正)
Linuxでexifを操作して、無劣化で画像を回転するためのメモ。
Exifを確認
まずは、写真などの画像のexifデータを調べる。
以下を参照した。多謝。m(__)m
sudo apt install imagemagick
imagemagickに含まれるidentiferでexifを確認できる。
identify -verbose 画像ファイル
画像を無劣化で回転
ExifのOrientationを変更することによって、画像を無劣化で回転する。
無劣化の回転のため、libimage-exiftool-perlをインストール。
sudo apt install libimage-exiftool-perl
画像の回転は、以下のコマンドで実行する。
exiftool -Orientation#=2 sample.jpg
exiftoolのオプション指定が難しい。
man exiftoolで確認すると、以下はすべて同じ回転をする。
$ exiftool -Orientation='Rotate 90 CW' a.jpg $ exiftool -Orientation=6 -n a.jpg $ exiftool -Orientation#=6 a.jpg
以下のサイトを参考に、一番簡単そうな番号で指定することにした。
1 = Horizontal (normal) : 標準 2 = Mirror horizontal : 水平方向に反転 3 = Rotate 180 : 180°回転 4 = Mirror vertical : 垂直方向に反転 5 = Mirror horizontal and rotate 270 CW :反時計回りに90°回転および垂直方向に反転 6 = Rotate 90 CW : 反時計回りに90°回転 7 = Mirror horizontal and rotate 90 CW : 時計回りに90°回転および垂直方向に反転 8 = Rotate 270 CW :方向: 時計回りに90°回転
(2023-06-05追記)
回転させた画像ファイルを元のままに
exiftoolで画像を回転させると画像ファイルの日付が回転させた日付になってしまうことに気がついた。
そこで、画像ファイルの日付を元の画像を作成した日のままにするオプションを付ける。
exiftool -Orientation#=2 -P sample.jpg
なお、-Pは大文字で、manには以下の記述がある。
-P Preserve the filesystem modification date/time ("FileModifyDate") of the original file when writing.(超意訳:ファイルを作成した日のままにするよ)
別解としてjheadを用いる
jheadでも画像ファイルの日付を画像を作成した日にすることができる。
jhead -ft sample.jpg
詳細は以下のページを参照のこと。
ディレクトリの画像ファイルを一括して回転させる
回転したいディレクトリに移動して、以下のコマンドを実行。
exiftool -Orientation#=2 -P *.jpg
(追記ここまで)
exifを削除
ちなみに、設定値を削除するには、オプション=の右側に空白を設定する。
exiftool -Artist= (ファイル名)
一部のコマンドを一括して削除することもできる。
exiftool -gps:all= (ファイル名)
劣化するけど回転角度を細かく指定する
細かい角度をしてするには、imagemagickに含まれているconvertコマンドを利用する。
ただし、細かい角度を指定した場合は、再圧縮時にロスが生じるため、劣化が起きてしまう点に注意。
$ convert -rotate -3.5 desktop01.png desktop03.png