Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

camera VQ1005

VQ1005で撮影したJPEG画像のタイムスタンプをPHP Exif Libraryで一括変換

投稿日:


IMG_0079.JPG
少し前にトイデジLovers!という本を読んでからというもの、VQ1005の再ブーム到来って感じです。自分だけw
で、すごい今更だと思うのですが、ちょっと便利な方法を紹介します。
VQ1005(とそのファミリー)で撮影した写真画像はなぜかEXIF上のタイムスタンプ(撮影日付)が固定なんですね。データとして、いつ撮ったものか分かんなくなっちゃうんです。ええ〜そんなバカな!と思うかもしれないけど、それがあるのがトイデジの魅力でもあったりw
で、ファイルを整理するのにフォルダを分けたり自分で工夫しないといけなかったりするのですが、Flickrとかにアップする場合はやっぱりタイムスタンプどうにかしたいなと。で、PHPでバッチ処理させて一気にタイムスタンプを書き換える方法を編み出したので共有します。
※Macでしか動作確認していません。WIndowsでも同じ用な事ができると思うんですが…。

PHP Exif Library

EXIFデータの読み込みだけであれば、exif_read_dataで事足りるのですが、今回はEXIFの書き換えをしたいので、PEL: PHP Exif Libraryを使う事にしました。
PELについてはこちらに詳細な解説があったので参考にしました。
PHPでExifを操作する – PHPプロ!TIPS+
こちらのページからソースをダウンロードしてきて、適当なフォルダに展開しておいてください。
※この記事執筆時点でバージョンは0.9.1でした。

MacPortsでPHPをインストール

MacにはデフォルトでPHPが入っているのですが、PELを使って開発をしている時にjdtounix関数でエラーが発生しました。つまり、カレンダー関連ライブラリがインストールされてないのですね。
なので、改めてMacPortsからインストールしました。
※MacPortsのインストール手順は省略。ググってください。
PHPのコンパイルオプションにcalendarを加えるために、port editします。

$ sudo port edit php5
--enable-calendar をconfigure optionに追加

そして、改めてPHPをインストール

$ sudo port install php5

これでOK

EXIFを書き換えるPHPソース

こんなスクリプトを書いてみました。

<?php
require_once('pel/PelJpeg.php');
$filenames = array();
$timestamp = null;
// Parameter
if ( empty($argv) || count($argv) <= 1 ) {
die("invalid parameter: php -f ".$_SERVER['PHP_SELF']." [filename] ([datetime Y-m-d H:i:s])\n");
}
foreach ( $argv as $param ) {
if ( $param == $_SERVER['PHP_SELF'] ) continue;
if ( preg_match('/^([0-9]{4}-[0-9]{2}-[0-9]{2}|[0-9]{4}\/[0-9]{2}\/[0-9]{2})/',$param) ) {
$timestamp = strtotime($param);
}
else if ( preg_match('/(jpg|jpeg|tiff)$/i',$param) ) {
array_push($filenames, $param);
}
}
echo "### Changing EXIF DateTimeOriginal ###\n";
foreach ( $filenames as $filename ) {
changeDateTimeOriginal($filename, $timestamp);
}
/**
* changeDateTimeOriginal
*/
function changeDateTimeOriginal($filename, $timestamp) {
if ( !$timestamp ) {
$timestamp = filectime($filename);
}
echo "filename     : " . $filename . "\n";
echo "new timestamp: " . date('Y:m:d H:i:s',$timestamp) . "\n";
$timestamp += 9 * 3600; // JST +9:00
$jpeg = new PelJpeg($filename);
$app1 = $jpeg->getExif();
if ($app1) {
$tiff = $app1->getTiff();
$ifd0 = $tiff->getIfd();
if ($ifd0) {
$exif = $ifd0->getSubIfd(PelIfd::EXIF);
$new_timestamp = $exif->getEntry(PelTag::DATE_TIME_ORIGINAL);
if (!$new_timestamp) {
$new_timestamp = new PelEntryTime($timestamp, PelEntryTime::UNIX_TIMESTAMP);
$exif->addEntry($new_timestamp);
} else {
$new_timestamp->setValue($timestamp,PelEntryTime::UNIX_TIMESTAMP);
}
file_put_contents($filename, $jpeg->getBytes());
echo "Done!\n";
} else {
echo "Failed!\n";
}
}
}
?>

これを、exif_date_setter.php という名前で保存しました。
先にダウンロードしておいたPELライブラリとの構成は下記の通り。

/path/to/script/
+-- pel/
+-- exif_date_setter.php

で、実行するとこんな感じに。

$ /opt/local/bin/php -f exif_date_setter.php ~/Pictures/2009/200903/20090326_vq1005/* "2009-03-26 00:00:00"
### Changing EXIF DateTimeOriginal ###
filename     : /Users/yager/Pictures/2009/200903/20090326_vq1005/IMG_0071.JPG
new timestamp: 2009:03:26 00:00:00
Done!

コマンドの引数は下記の通り。

$ php -f exif_date_setter.php [ファイル名(*ワイルドカード指定可能)] [タイムスタンプ(YYYY-MM-DD HH:MI:SS)]

タイムスタンプを省略すると、指定した画像ファイルのタイムスタンプ(PCに保存した日付)が設定されます。撮影日がハッキリしている場合は、第2引数で日付を強制的に指定できます。

さらに便利にするためにショートカット

ちょっとコマンドが長いのでエイリアスを作っておきます。

$ alias vq1005="/opt/local/bin/php -f /path/to/script/exif_date_setter.php"

こうしておくと、

$ vq1005 [ファイル名] [タイムスタンプ]

といった感じでサクッと日付変更できるので便利です。
で、これを .bash_profile か何かに書いとけばOK。

$ vi ~/.bash_profile
alias vq1005="/opt/local/bin/php -f /path/to/script/exif_date_setter.php"
の行を足して保存。

まとめ

EXIFの編集って画像ソフトとかでもできるんだろうけど、それだけのために一々アプリケーション起動したくなかったので、こんな方法になってしまいました。VQ1005ユーザーの方にはもしかしたら優しくない記事だよなぁ 🙁
ちなみにこれが、
Flickr EXIF
このスクリプトで日付変更した画像をFlickrにアップロードして、詳細情報を確認した画面です。
「Date Time Original」だけ書き変わって、「Modified」「Digitized」は古いままである事が分かります。ただ、Flickrの撮影日付(taken on)は「Date Time Original」で見ているので、これでちゃんとカレンダーArchiveにも表示されます。
要望が多ければ Windows でも動くように試して見ようと思います。

-camera, VQ1005

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

ビスタクエスト「VQ1005」が届いて早速開封

昨日買ったと報告したばかりの「VQ1005」ですが、予定通り今日の夕方届きました。なんか、プロキッチンの配送センターが家から近くて伝票見てビックリ。でも、ワクワク気分が勝ったので早速開封に突入! トイ …

SIGMA(シグマ) 30mm F1.4 EX DC HSM(フォーサーズ)が届きました

先日、つぶやいていたばかりですがやっぱり買いました。 しかし、新しいレンズ欲しい! via: 単焦点の明るいレンズが欲しいのですが・・・ そして、早くも今日注文していたレンズが届いたのです。 カワイイ …

革のカメラストラップ購入/これプレゼントに良いかも!

ずっと、カメラ(E-300)が壊れてて忘れてましたがつい先日E-520を買って思い出しました。去年の11月、自分の誕生日にカメラストラップを買ったのでした。ずっと、付属のストラップを使ってたんですが、 …

カメラと写真映像の祭典「CP+ 2015」の初日に行ってきた

一応カメラも写真も大好きなんですが、これまで参加したことのなかったカメラ業界最大のイベントCP+に初参加してきました。本日12日から15日まで4日間に渡ってパシフィコ横浜で開催されています。初日の午前 …

トイデジカメ「VQ1005」を買いました。

ネタフルさん経由で知ったのですが、トイカメラっぽい味わいのある写真が撮れるVista Quest(ビスタクエスト)「VQ1005」というカメラを注文しました。 Vista Quest(ビスタクエスト) …

スポンサードリンク

スポンサードリンク