30 July 2011

(Perl) jpeg画像のexif回転方向タグを変更する

jpeg画像のexif回転方向タグを、任意の値に変更する。

値の書き換えであっても ”SetNewValue” メソッドを使うようだ。


#!/usr/bin/perl

use warnings;
use strict;
use Image::ExifTool;

# ファイル名のユーザ入力
print("Exif rotate flag change\ntarget file : ");
my $filename = <>;
chomp($filename);
unless(-f $filename || -w $filename){ die("file not exist or readonly\n"); }

my $exifTool = Image::ExifTool->new();
$exifTool->ImageInfo($filename);
# 回転情報を得る(1:0 deg, 3:180 deg, 6:90 deg(CW), 8:270 deg (CW))
my $exifRotate = $exifTool->GetValue('Orientation', 'Raw');
unless(defined($exifRotate)){ die("no exif data in jpeg\n"); }
print("rotation flag = ". $exifRotate . "\n");

# 書き込む回転方向タグのユーザ入力
print("Rotation flag change (1:0deg, 3:180deg, 6:90deg CW, 8:270deg CCW) : ");
$exifRotate = <>;
chomp($exifRotate);
unless($exifRotate == '1' || $exifRotate == '3' || $exifRotate == '6' || $exifRotate == '8'){
die("rotation flag is out of range\n");
}

# 回転方向タグを書き込む
$exifTool->SetNewValue('Orientation'=>$exifRotate, Type => 'ValueConv');
if($exifTool->WriteInfo($filename) == 0){ die("file write error\n"); }

print("done\n");