Com2 Blog

翻訳とWeb制作を基礎から分かりやすく学ぶ

Perlで写真の情報を取得して一覧を作成する方法

photos

撮影した写真がたまって、整理に困っていませんか? 私はある程度の、いえ、かなりの枚数がたまったところで一覧表にしています。

一覧表はExcelで作成します。「ファイル名」、「撮影日時」、「写真の内容」、その他現像して誰に渡したか、その枚数なども記録します。写真の内容は自分で入力するよりほかありませんが、ファイル名と撮影日時くらいは自動でどうにかしたいところです。

そこで、簡単なPerlスクリプトで写真の情報を取得する方法をご紹介します。どなたでも試していただけると思います。

まず、Perlを使うための準備が必要です。手順はPerlを使う準備をご覧ください。ここに記載しているように、WindowsにActivePerlをインストールした環境を想定しています。異なる環境でも、スクリプト自体は同じように使えます。

以降、写真の情報を取得するスクリプトについて説明します。

準備

image-ExifToolをインストール

「スタート」-「すべてのプログラム」-「ActivePerl」-「Perl Package Manager」を起動します。

左上の「View all packages」をクリックし、スクロールして「image-ExifTool」を探します。

Image-ExifTool-1

「Action」-「Install Image-ExifTool…」をクリックします。

Image-ExifTool-2

すると、「image-ExifTool」のパッケージアイコンに緑のマークがつきます。

Image-ExifTool-3

「File」-「Run Marked Actions」をクリックします。

Image-ExifTool-4

インストールの確認メッセージが表示されるので「OK」をクリックします。

Image-ExifTool-5

インストールが完了すると、パッケージアイコンがグレーからカラーに変わります。

Image-ExifTool-6

これで準備完了です。

写真1枚の情報をとりあえずすべて取得してみる

まずは、Image-ExifToolでどのような情報を取得できるのか、「photo-1.JPG」という1枚の写真の情報をすべて取得して見てみましょう。

スクリプト

テキストエディタを起動して次のスクリプトをコピー&ペーストし、ファイル名は「sample-1.pl」とし、文字コードは「UTF-8」で保存します。

use strict;
use warnings;
use Image::ExifTool;

my $file = "photo-1.jpg";
my $exiftool = new Image::ExifTool;
my $exifinfo = $exiftool->ImageInfo($file);

my($key);
for $key (sort keys %$exifinfo){
print "$key : $exifinfo->{$key}\n";
}

実行

Cドライブ直下に「photos」というフォルダを作り、その中に「photo-1.JPG」と「sample-1.pl」を入れます。

「スタート」-「すべてのプログラム」-「アクセサリ」-「コマンドプロンプト」でコマンドプロンプトを起動します。

「cd /d C:\photos」と入力してEnterを押します。
※「cd /d xxxx」はxxxxにドライブを変更するコマンドです。

1_cd

「perl sample-1.pl」と入力してEnterを押します。

2_pl_filename

「photo-1.JPG」の情報が出力されました。

3_acquired_info

ここでは、「CreateDate」と「DateTimeOriginal」という2つの出力結果に注目します。
「DateTimeOriginal」はシャッターが押された時間、「CreateDate」は撮影した写真がメモリーに記録された時間です。通常この2つは同じ日時か、数秒の誤差の範囲となります。

フォルダ内の写真のファイル名と撮影日時をすべて取得する

スクリプト

テキストエディタを起動して次のスクリプトをコピー&ペーストし、ファイル名は「sample-2.pl」とし、文字コードは「UTF-8」で保存します。

use strict;
use warnings;
use Image::ExifTool;
my $dir = '.';
opendir(DIR, $dir) or die "$dir: $!";
while (my $img = readdir(DIR)) {
  next unless ($img =~ /\.(jpg)|(JPG)$/);
  my $exifinfo = Image::ExifTool->new->ImageInfo($img);
  close($img);
  my $date_time_original = $exifinfo->{'DateTimeOriginal'};
  open(NEWFILE, ">> ExifInfo.txt") or die "ExifInfo.txt: $!";
  print NEWFILE "$img\t$date_time_original\n";
  close(NEWFILE);
}

実行

Cドライブ直下に作成した「photos」というフォルダの中に複数の写真と「sample-2.pl」を入れ、「sample-2.pl」をダブルクリックします。

4_sample-2-1

「ExifInfo.txt」というファイルが生成されます。

5_sample-2-2

「ExifInfo.txt」を開くと、ファイル名と撮影日時が出力されていることが確認できます。

6_acquired_info

Excelで表のひな型を作成します。

7_excel_1

「ExifInfo.txt」の内容を作成したExcelにコピー&ペーストすれば完了です。

8_excel_2

あとは、写真の内容を記述したり、その他必要な情報を右コラムに追記していくだけです。

まとめ

ちょっとしたことかもしれませんが、日常の面倒くさいことを一つ解消できていると感じています。

このような基礎的な知識でできる範囲にはなりますが、今後もできるだけ紹介していきたいと思います。


コメント

コメントを残す