Hatena::ブログ(Diary)

jiroの日記 このページをアンテナに追加 RSSフィード

2006-12-02

[]Image::ExifTool

旅行でとった写真の日付が最初の方12時間ずれていたから一括して変更したかったんだけど、perlの勉強もかねて作ってみた。んー、どこをみてperlを勉強したらよいのかよくわからない。rubyだったら公式ページにいろいろ書いてあるしpythonだったらすばらしいチュートリアルがあるのに、、、どこにそういった類いがあるのかわからんかった。

で、作ったのがこれ。EXIFに対して全然理解がないからとりあえず、Dateと名前のつくタグについてはすべて計算の対象にしてみた。一応これで、シェルスクリプトを書けば一度にまとめていろいろ操作できる。まぁとりあえず晒してみる。

use strict;
use Image::ExifTool 'ImageInfo';
use DateTime;
use Data::Dumper;

if ($#ARGV != 1) {
	&usage();
	exit(1);
} elsif (!($ARGV[1] =~ /^-?\d+$/)) {
	&usage();
	exit(1);
}
my @modTags = qw( DateTimeOriginal RicohDate ModifyDate CreateDate);
my $target = $ARGV[0];
my $addTime = $ARGV[1];
my $info = ImageInfo($target);
my $tag;

my $exifTool = new Image::ExifTool;
$exifTool->ExtractInfo($target);
foreach $tag (@modTags) {
	my $dateTime = parseDateTime($info->{$tag});
	&addTime($dateTime, $addTime);
	my $newVal =  $dateTime->strftime("%Y:%m:%d %T"); 
	$exifTool->SetNewValue($tag, $newVal);
}
$exifTool->WriteInfo($target);

# 日付をパースし、DateTimeオブジェクトを生成する
sub parseDateTime {
	my($strDate) = @_;
	my @dateTime = split(/:| /, $strDate);
	my $ret = DateTime->new(year => $dateTime[0],
		month => $dateTime[1],
		day => $dateTime[2],
		hour => $dateTime[3],
		minute => $dateTime[4],
		second => $dateTime[5],);
	return $ret;
}

# 時間を足す
sub addTime {
	my($dt, $addTime) = @_;
	$dt->add(seconds => $addTime);
}

# 使い方を出力する
sub usage {
	print <STDERR>, 'Usage: perl ' . $0 . " <FILENAME> <ADD TIME IN SECOND>\n";
}

2003-12-04

[]ミリ秒単位のsleep

perlで1秒未満のsleepって指定できないから

select(undef, undef, undef, $sleep_time);

って指定するらしい。秒単位なのでミリ秒を指定したければ/1000すればいい。

ちょいとメモ

2003-11-04

[]cpanの設定ファイル

前までわからなかったCPANモジュールの設定ファイルのありかがわかりました。

CPAN/Config.pm

です。これを消せば最初から設定やり直せます。

これでCPANの苦手意識が直りそうだ。

2003-08-30

[]PDFJ

中島 靖さんのページにあるPDFJ。これがすごい!

今までは扱いが難しかった日本語PDFをPerlのみで生成してしまう。

動的にPDFを作り出してしまうことも可能になる。う〓むすごいなぁ。