電子書籍の厳選無料作品が豊富!

Perlで写真のファイル名を管理しています。
写真のEXIFの撮影日付をタイムスタンプに書換えたい、Perlでのやり方を教えてください。

写真をファイル名変更や画像処理した後タイムスタンプがその作業の時間に書き換えられます。オリジナルの時間を大切にしたいので、ファイルのタイムスタンプにEXIFの撮影時間、ファイル管理のNautilusで見ると、ImageタグのDate Taken:に情報があります。
例えば、Date Takenが 2009:12:15 06:00:00 の場合、Accessed と Modified の所にも同じ時間情報 2009:12:15 06:00 を取り込みたいのです。よろしくお願い致します。

A 回答 (1件)

とりあえず1つ変更する分です。


沢山変更するのは、foreachなりなんなりで回せばよいでしょう。

use strict;
use warnings;
use 5.010;

use Time::Local;

# 以下はデフォでは入ってないので、CPANなりppmなりで入れる。
use Image::ExifTool;

#------------------------------------------------------------

my $file = "./hogehoge.jpg";

#------------------------------------------------------------

my $exifTool = new Image::ExifTool;

# $exifInfo はExif情報ハッシュへのリファレンス
my $exifInfo = $exifTool->ImageInfo($file);
my $exifTime = $exifInfo->{'DateTimeOriginal'};
print $exifTime;

#------------------------------------------------------------

# 2000:10:21 10:30:25 みたいな形になるようなので分解
my ($year, $mon, $day, $hour, $min, $sec) = $exifTime =~ /(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)/;
my $exifTimeEpoch = timelocal($sec,$min,$hour,$day,$mon-1,$year);

#------------------------------------------------------------

# ModifyとAccessを修正
utime $exifTimeEpoch , $exifTimeEpoch , $file;
# とはいえ、Accessってアクセスしちゃうから直ぐにまた変更になるんじゃ・・・

#------------------------------------------------------------
    • good
    • 0
この回答へのお礼

kokucho81さん、ほんとうに有難うございました。

アドバイスと指摘の通り、下記に2箇所を補足させていただきます。

1. ExifToolは下記のリンクでダウンロードし、インストールしました。

http://www.sno.phy.queensu.ca/~phil/exiftool/ind …

OSはFedora 14だったので、こちらのパッケージを使いました。
http://www.sno.phy.queensu.ca/~phil/exiftool/Ima …

2. ModifyとAccessタイムについて

確かにAccessは意味がありませんでした。(笑)コンソールでModifyタイムがExif時間でよかったです。
このように修正して使わせていただきました。

# ModifyとAccessを修正
utime time() , $exifTimeEpoch , $file;

有難うございました。

お礼日時:2011/04/28 03:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!