ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英語OS+英語ソフト環境で日本語での日付表示

ちょっと不思議な現象にあっています。
英語のフリーソフトで使いたいソフトがあったのでwinXP日本語にインストールしたのですがエラーで使えませんでした。
そこでwin2Kの英語OSにインストールしたらちゃんと使えたのでいま試用期間中なのですが、日付表示が日本風の”2007/11/28”になってしまいました。
それでそのソフト上で日付にマウスオーバーすると"2007年11月28日"と漢字まで表示されている始末。
私として"28/11/2007"もしくは"28/Nov/2007"となって欲しいのです。
なぜならその分表示させなければならないセルの幅が小さくてすむので多くの日数を表示できるようになります。
基本的に英語OSなのでwindowsのシステムから取り出した日付ならこんなことにはならないはずなんですけど、どこをいじればいいのかわかりません。
ソフト側の問題ではないと思います。

よろしくお願いします。

Aベストアンサー

コントロールパネル-地域のオプション-日付 の設定を確認して下さい。

http://support.microsoft.com/kb/883021/ja

Qコピーした際のタイムスタンプの維持(圧縮ファイルvsフォルダ)

http://oshiete1.goo.ne.jp/qa3341199.html

でmp3データの管理について質問した者です。

圧縮せずにそのままアルバムごとにフォルダに入れて管理するということに決めたのですが、実際に運用しようとしたところ問題が生じました。それはタイムスタンプの維持です。

圧縮ファイルをコピーして移動しても、その中に入っているファイルのタイムスタンプは維持されますが、フォルダをコピーして移動した場合、その中に入っているファイルのタイムスタンプ(更新日時だけでなく、作成日時まで含め)が書き換えられてしまいます。

1.整理の都合上、どうしてもタイムスタンプを維持したいのですが、その場合はフリーソフトを使うか、圧縮ファイルにしないとやはり無理でしょうか?
2.何故フォルダをコピーした時、中身のファイルのタイムスタンプまで書き換えられてしまうのでしょうか? その利点・理由についてご存じの方、教えていただければ幸いです。「単なる仕様」なのかもしれませんが・・・
3.PCの中でコピーするのではなく、PCから直接DVDにコピーした場合は、フォルダの中身のタイムスタンプは維持されますか? 試験的にやってみようかとも思いましたが、容量を考えるとあまりにももったいないので、事前にお教えいただければ幸いです。

http://oshiete1.goo.ne.jp/qa3341199.html

でmp3データの管理について質問した者です。

圧縮せずにそのままアルバムごとにフォルダに入れて管理するということに決めたのですが、実際に運用しようとしたところ問題が生じました。それはタイムスタンプの維持です。

圧縮ファイルをコピーして移動しても、その中に入っているファイルのタイムスタンプは維持されますが、フォルダをコピーして移動した場合、その中に入っているファイルのタイムスタンプ(更新日時だけでなく、作成日時まで含め)が書き換え...続きを読む

Aベストアンサー

フォルダについてはおっしゃる通りですが
ファイルについては、コピーでも移動でもタイムスタンプは
ちゃんと維持されますけど使ってるOSとかはどのようなもの
でしょうか?
わたしのはXPです。

DVDへの書込みでは通常タイムスタンプは維持されますが
オプションによって、DVDへ書き込んだ日付にすることは
できます。

>試験的にやってみようかとも
1枚だけでもDVD-RWを買っておくと便利ですよ

Q誕生日にカリフォルニアのディズニーランド

誕生日にカリフォルニアのディズニーランドに行きます。日本のディズニーランドのように誕生日に何か特別なイベントはありますか?

Aベストアンサー

3年前になりますが私も体験しました!
日本以上の体験が出来ますよ!

まず、お誕生日の缶バッジをもらえたりします(ディズニーランドのシティホール)

それから、ディズニーランドのプラザインというレストランで
ほぼ毎日、誕生日パーティをやっています
かなり子供向けなのですが、大人でも参加OK.
昼2時くらいからで、ひとり10ドルくらいだったと思います
プラザインの出入り口に受付カウンターが出されていて、そこで当日受付も大丈夫(予約がベターだとは思いますが)。
オリジナルなパティシエの格好をした人が出てきて
カップケーキ(日本の大人がおいしいと思える味ではありません)に自分でデコレーション(お遊戯程度のもの)をし、
そのあと、キャラクター(私のときは50周年の衣装をきたみっきー&ミニーでした)が出てきて、一緒に歌ったり写真を撮ったりします

ほかにも、レストランでその旨を伝えればカップケーキとキャストの歌でお祝いしてくれたりしますし、
キャラクターダイニング(各パークと各直営ホテル3件、の計5カ所でやってます。ツアーでも直営ホテル宿泊でなくても、日本から予約OK)
では、
事前に伝えておくと、キャラクターが出てきて一緒にお祝いしてくれますよ

ほかにも子供向けですが、レストランで5ドルくらいのバースデイバッグ(紙の帽子程度のものが入っている)、
20ドルくらいのバースデイバケット(記念のピンバッジや雑貨が数点。キャラクターによって4種類くらいあり)があります

いずれも今もあるかどうかは不明なのですが
ぜひ、ホームページなどで確認して、めいっぱい現地でのお誕生日を楽しんでくださいね!
また、どれもお誕生日当日でなくても大丈夫!
現地でのお誕生日は本当~に楽しいですよ!
良い誕生日になりますように

3年前になりますが私も体験しました!
日本以上の体験が出来ますよ!

まず、お誕生日の缶バッジをもらえたりします(ディズニーランドのシティホール)

それから、ディズニーランドのプラザインというレストランで
ほぼ毎日、誕生日パーティをやっています
かなり子供向けなのですが、大人でも参加OK.
昼2時くらいからで、ひとり10ドルくらいだったと思います
プラザインの出入り口に受付カウンターが出されていて、そこで当日受付も大丈夫(予約がベターだとは思いますが)。
オリジナルなパティシエ...続きを読む

QZipファイルのタイムスタンプが解凍時刻になる

Zipファイルを解凍した時に、
フォルダのタイムスタンプが、
ファイル作成時ではなく解凍した日時になってしまいます。

ファイルは作成日時のまま保持できるのですが、
なぜかフォルダはどうしても解凍日時になります。

これは、圧縮時の設定なのか、解凍時の設定によるものなのか
どちらなのでしょうか。

WEBの制作物管理にて納品データを管理するにあたって
困っています。

きちんと作成時のままに保持するためには
どのようにすれば良いのでしょうか。

Aベストアンサー

windows7(64bit)とLhaz(64bit)の組合せで圧縮・解凍をやってみましたが,
確かにフォルダ部分のみ更新日時が現時刻に書換えられます。
ファイルの更新日時は残ってます。
なお,エクスプローラから直接ZIPを解凍すると,ファイル自体の更新日時も現時刻に
書換えられてしまう様なので,ご注意を。
設定を探してみましたが,わかりませんでした。

QEXCELで日付と時刻のセルを結合させるには?

イロイロ調べたのですが見つからなかったので質問します。
B列に入った日付 2005/02/21 とC列に入った時刻 3:30:30を結合させる関数等はありますか?

「2005/02/21 3:30:30」という風に表示させたいのです。
申し訳ありませんがよろしくお願いいたします m(__)m

Aベストアンサー

Wizard_Zeroと申します。

=B1+C1

ただし、B列が純粋な日付データ、C列が純粋な時刻データでなければNG。

Q宅ファイル便で写真を送ろうとしたら、ファイル名が半角なので送信できませ

宅ファイル便で写真を送ろうとしたら、ファイル名が半角なので送信できませんのエラーが出ました。
写真を読み込む時にマイドキュメントに入れないほうがいいとヘルプで見たのですが・・・
一旦読み込んだデータをメモリーに保存しなおしましたが同じエラーでした
良い方法を教えてください。

Aベストアンサー

文章をそのまま拝見しての回答になりますが、
ファイル名を半角から全角に変更すれば良いのではないでしょうか。

今、ここに表示されている文章の文字は全角です。
ファイル名はその半角の(1文字の半分くらいの細長い)カタカナだったりしませんか?

もしそうだとした場合、サーバーにアップすると文字化けしやすいので、
(変な文字に変換されやすいので)、それによるトラブルであれば
ファイル名を普通の「英数字」か「全角の文字」に変更してみてはいかがでしょうか。

文章をそのまま受け取っての回答ですので、
もし勘違いしていましたら大変申し訳ありません。

ちなみに「ファイル名が半角なので送信できません」ではなく
「ファイル名に半角スペースがあって送信できません」の場合は、下記をご参照ください。
http://c.filesend.to/quest/answer.php?an=1008#qap

きちんと送れるといいですね!

Qエクセルで、1つの列で文字(降順&優先順位1)と日付(昇順&優先順位2)の並べ替えはできますか?

エクセル(97)で、1つの列で文字(降順&優先順位1)と日付(昇順&優先順位2)の並べ替えはできますか?

例えば、C列に「2004/5/18~2004/8/10」までの日付と「予定」という文字列がありましたら、文字列(予定)を上にくるように並べ替えて、2番目の優先順位の日付は「古い順(昇順)」に並べていきたいのです。。

やりかたをご存知のかた、いらっしゃいましたらよろしくお願いします

Aベストアンサー

まず、全体を選択して降順で並べ替えます。
文字列が上に来ると思うので、次に下に来た日付部分をすべて選択します。
そして昇順で並べ替えて下さい。
これで大丈夫かと。

Qファイル名に日付を指定したいのですが・・・

MS-DOSのバッチファイルやAccessでのファイル保存の際に、コマンドでファイル名に現在日付を組み込むことは可能でしょうか?

Aベストアンサー

MS-DOSのバッチファイルの場合、
下記でファイル名に日付が入れられます。

for /f "tokens=1,2,3 delims=/ " %%i in ('date /t') do set File_Name=XXX_%%i%%j%%k.dat

Qアメリカからイギリスへ飛行機で飛ぶと日付は?

初歩的な質問ですみません。子どもに説明するのにうまく説明できないので
お教えください。

1.アメリカからイギリスへ移動すると日付は変更しますか?

2.アメリカから日本へ移動する場合、太平洋の上の日付変更線を
またぐため、日付は変わります。ならば、わざとアメリカ→ロシア→日本と
きたら日付はどうなりますか?

Aベストアンサー

1.いいえ
 日付変更線は太平洋上にしか存在しません

2.
 どっちにしろ次の日になる
 米国->ロシア->日本を瞬間移動出来るわけもないので、日付変更線を越えない様に飛行しても結局その飛行時間は丸一日分ほど掛かるんで

Q表示されるファイル名とプロパティの中のファイル名

拡張子の付いていないファイル名を一括変換ソフトを使用して、一括で拡張子をつけようとしたところ、変換ソフトに読み込むと、拡張子が既にファイル名に付いていました。
ところが、(エクスプローラで)表示されている名前には拡張子が付いていない。

プロパティを開いてみてみると「全般」タブの一番上にあるファイル名を入れる所には拡張子のないファイル名、「ウィルスプロパティ」タブの「ファイル名」には拡張子付きのファイル名が入っていました。

この「全般」タブの方のファイル名に一括で拡張子を入れたいのですが、「全般」タブの方と「ウィルスプロパティ」タブのファイル名に何かそれぞれ呼び方はありますか?
両者を区別してソフトを探すのにキーワードにしたいのですが。

それとも、ひとつひとつ右クリックの「名前の変更」で拡張子をつけていくしかないのでしょうか…。
お分かりになる方いらっしゃいましたらよろしくお願いいたします。

Aベストアンサー

OSがWindowsと仮定して(ウィルスプロパティというのが正体不明ですが)
エクスプローラで、フォルダオプションの表示タブにて「登録されている拡張子は表示しない」のチェックがはずれているか御確認を。


人気Q&Aランキング