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英語での日付表記について

英語でのテキストを作っております。日付表記について教えてください。

日本では、例えば2009年4月24日を省略した書式で、
09/04/24
と表すことがありますが、
これを、
04/24/09
と表して、英語圏向けの日付表記として問題ないでしょうか?
八文字で収まる条件で他にもっと一般的な書式はあるでしょうか?

よろしくお願いします。

Aベストアンサー

諦めて
04Apr09
が無難な気がする. もしくはいっそのこと ISO 完全準拠の
20090424
あるいは
09-04-24
とか.

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

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

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

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

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

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

Aベストアンサー

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

Q日付の英語表記の正しいものは

たとえば、日記や手紙などに英語で日付を記入する場合、


feb.14.2009

と書くのか、


14.feb.2009


と書くのか、どちらが正しいのか、もしくはどちらでもいいのか、
一般的な方を教えて下さい

Aベストアンサー

こんばんは。

よく見かける質問ですね。

はるか昔に、NHK講座のテキストで覚えましたが、

Feb. 14, 2009

(Feb[ピリオド+1文字空白]14[カンマ+1文字空白]2009)

が一般的です。

ピリオドは、「Febというのは、略した書き方ですよ」という意味で、
カンマは、「(2月14日にも色々あるけれども)2009年の2月14日ですよ」の「の」に相当します。



一応、過去のQ&Aも貼っておきますね。

http://oshiete1.goo.ne.jp/qa3656908.html
↑英語カテゴリーのスーパースター2名様のご回答あり

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

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

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

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

ご参考になりましたら。

こんばんは。

よく見かける質問ですね。

はるか昔に、NHK講座のテキストで覚えましたが、

Feb. 14, 2009

(Feb[ピリオド+1文字空白]14[カンマ+1文字空白]2009)

が一般的です。

ピリオドは、「Febというのは、略した書き方ですよ」という意味で、
カンマは、「(2月14日にも色々あるけれども)2009年の2月14日ですよ」の「の」に相当します。



一応、過去のQ&Aも貼っておきますね。

http://oshiete1.goo.ne.jp/qa3656908.html
↑英語カテゴリー...続きを読む

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

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

Aベストアンサー

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

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

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

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

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

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

Qこの写真の英語と数字をどうしたら 誕生日などにできますか? ちなみに 0212と0410の日付を教え

この写真の英語と数字をどうしたら
誕生日などにできますか?
ちなみに
0212と0410の日付を教えて欲しいです、


ちなみにこれは、カップルのアプリので彼氏も英語全くです
バカなカップルでごめんなさい

よろしくお願いします!

Aベストアンサー

0212→2月12日→February 12 0410→4月10日→April 10

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

QMovableTypeでブログを投稿した時の日付表記を英語にするには?

最近MovableTypeを使い始めた者です。
ちなみにバージョンは3.2-ja-2です。

ネットで無料でダウンロード出来るテンプレートを組み込んでブログを作りました。
ですが、このテンプレートは新規エントリーでブログを書いて投稿した時に投稿した日付が入りますが、日本語で「2006年02月25日」という風に入ります。
他の人のMTで作られたサイトを見ていると、ブログ投稿の日付が「February 25,2006」って感じに入っているのを見ました。僕もこう言う風にしたいんですが、その方法が解りません。

デフォルトのテンプレートは確か英語表記だったので、この僕が組み込んだテンプレートは何かタグがいじられていたのかもしれません。デフォルトに全部戻してしまうのもイヤなので何か方法はないのでしょうか?


管理画面のメインメニューから、設定→基本(設定)のところで日付表示用の言語を選べれるので、これかと思って英語にしてみたのですが、変わったのは月別アーカイブの表記だけで、相変わらずエントリーしたときの日付は日本語のままです。


MTを使い慣れている人で解る人が居られたらどうか教えてください。

宜しくお願いします。

最近MovableTypeを使い始めた者です。
ちなみにバージョンは3.2-ja-2です。

ネットで無料でダウンロード出来るテンプレートを組み込んでブログを作りました。
ですが、このテンプレートは新規エントリーでブログを書いて投稿した時に投稿した日付が入りますが、日本語で「2006年02月25日」という風に入ります。
他の人のMTで作られたサイトを見ていると、ブログ投稿の日付が「February 25,2006」って感じに入っているのを見ました。僕もこう言う風にしたいんですが、その方法が解りません。

デフォルト...続きを読む

Aベストアンサー

英語表記といっても、何パターンかあるので、
どのように表示したいのかを書いたほうが、答えやすいかも知れません。

取り合えず、方法は、

各テンプレート内の
<$MTEntryDate format="ここを変更します"$>


簡単なのは、
<$MTEntryDate format="%x"$>
と書くと、
April 12. 2004
と表示される方法です。


その他、
%a曜日を省略文字で表示(Mon)
%A曜日を文字で表示(Monday)
%b月を省略文字で表示(Apr)
%B月を文字で表示(April)

等いろいろあります。

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

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

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

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

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

Aベストアンサー

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


人気Q&Aランキング