apt-getでImage::ExifToolをインストールしました。個人的にCPANはあまり使いません。
$ sudo apt-get install libimage-exiftool-perl
まずは基本的な使い方
exif.pl
$ perl exif.pl DSC_0005.jpg
必要な情報だけを取り出してみる
$ perl exif.pl DSC_0005.jpg
Docomoの機種特有なのか知りませんが、画像を取るとDCM_xxxx.jpgというように連番で保存されるのですが、
例えばその画像を別媒体などへ移動させた後に、撮影をすると移動させたものと同じ番号から画像が保存されてしまいます。
その状態で同じ媒体に移動しようとすると上書き警告が表示され、わざわざ一つ一つリネームせざるおえないという大変面倒な事態になります。
そこで、Exif情報から抽出した日付というユニークで管理しやすい名前にリネームするスクリプトを書いてみました。
Usage:
$ perl exif_date_renamer.pl /storage/pictures/dcim (絶対パス)
あくまで自分のスマフォで撮った画像用の簡易的な画像のリネームツールです。
Image::ExifTool - cpan
$ sudo apt-get install libimage-exiftool-perl
まずは基本的な使い方
exif.pl
use Image::ExifTool;
$file = shift;
#ExifToolオブジェクトを作る
$exifTool = new Image::ExifTool;
#画像ファイルからメタ情報を展開
$exifTool->ExtractInfo($file, \%options);
#画像ファイル中の有効なExifタグを列挙
@tagList = $exifTool->GetFoundTags('File');
#列挙したExifタグの値を一つずつ表示していく
foreach (@tagList) {
print "$_:\t", $exifTool->GetValue($_), "\n"
}
$ perl exif.pl DSC_0005.jpg
ExifToolVersion: 8.60
FileName: DSC_0005.jpg
Directory: .
FileSize: 3.1 MB
FileModifyDate: 2014:03:13 21:54:20+09:00
FilePermissions: rwxr--r--
FileType: JPEG
MIMEType: image/jpeg
ExifByteOrder: Big-endian (Motorola, MM)
Make: Sony
Model: SO-02E
Orientation: Horizontal (normal)
XResolution: 72
YResolution: 72
ResolutionUnit: inches
Software: 10.1.D.0.343_3_f600
ModifyDate: 2013:05:04 14:39:15
YCbCrPositioning: Centered
ExposureTime: 1/1600
FNumber: 2.4
ISO: 40
ExifVersion: 0220
DateTimeOriginal: 2013:05:04 14:39:15
CreateDate: 2013:05:04 14:39:15
(略)
必要な情報だけを取り出してみる
use Image::ExifTool;
$file = shift;
$exifTool = new Image::ExifTool;
$exifTool->ExtractInfo($file, \%options);
$make = $exifTool->GetValue('Make');
$model = $exifTool->GetValue('Model');
$date = $exifTool->GetValue('DateTimeOriginal');
print "機種: $make $model\n撮影日: $date\n";
$ perl exif.pl DSC_0005.jpg
機種: Sony SO-02E
撮影日: 2013:05:04 14:39:15
Docomoの機種特有なのか知りませんが、画像を取るとDCM_xxxx.jpgというように連番で保存されるのですが、
例えばその画像を別媒体などへ移動させた後に、撮影をすると移動させたものと同じ番号から画像が保存されてしまいます。
その状態で同じ媒体に移動しようとすると上書き警告が表示され、わざわざ一つ一つリネームせざるおえないという大変面倒な事態になります。
そこで、Exif情報から抽出した日付というユニークで管理しやすい名前にリネームするスクリプトを書いてみました。
Usage:
$ perl exif_date_renamer.pl /storage/pictures/dcim (絶対パス)
#!/usr/bin/perlExifに記録される時間は1秒単位のため、1秒あたり複数枚以上の画像がある場合はとりあえず連番を付けることで上書きを回避するようにしてみました。
use File::Find;
use File::Basename;
use Image::ExifTool;
find(\&findpath, shift);
sub findpath {
$file = $File::Find::name;
if($file =~ /\.jpg$/) {
$exiftool = new Image::ExifTool;
$exiftool->ExtractInfo($file, \%options);
$maker = $exiftool->GetValue('Make');
$model = $exiftool->GetValue('Model');
$date = $exiftool->GetValue('DateTimeOriginal');
$date =~ s/://g; $date =~ s/ //g;
if($maker eq 'Sony' && $model eq 'SO-02E') {
$imgdir = dirname $file;
$newname = "$imgdir/$date";
if(-f "$newname.jpg") {
$cnt++;
print "[!] $file => $newname\_$cnt.jpg\n";
rename $file, "$newname\_$cnt.jpg";
} else {
print "$file => $newname.jpg\n";
rename $file, "$newname.jpg";
}
}
}
}
あくまで自分のスマフォで撮った画像用の簡易的な画像のリネームツールです。
Image::ExifTool - cpan
- 関連記事
-
-
perlでシーザー暗号 2014/09/23
-
響ラジオをperlとcrontabで自動で定期的に落とす 2014/07/14
-
Perl Image::ExifTool 画像ファイルを撮影日時にリネームするスクリプト 2014/06/13
-
Perl ポートスキャン 2012/03/17
-
perltidyで整形 2012/02/24
-