pythonでJpeg画像のexifを編集する
ある時子供を撮影するのによく使っているデジカメNEX-5の初期設定を誤ったらしく、全部の写真の日付が一年前になっていることに気づいた。
印刷する時に日付を入れる場合は全部一年ずれて日付がついてしまうので、今までNEX-5で撮った写真のexifを書き換えるためのスクリプトを書いた。
とりあえずpythonでexifをいじるために調べて最初に出てきたのはPython Imaging Libraryだったが、どうやらexifを読み込む機能しかないらしい。
http://www.pythonware.com/products/pil/
pyexiv2というのがイケてるらしいのでこれでスクリプトを書くことにする。
Python で JPEG の Exif などを扱う
チュートリアル
Mac上にvagrantでubuntu12環境を用意した上でpyexiv2をインストールする
apt-get install python-pyexiv2
これで終わり。
あとはpyexiv2を使った普通にexifの日付情報を一年進めて書き換えた上で保存すればOK
import sys import os import stat import datetime import pyexiv2 targetDir = "/home/vagrant/100MSDCF_2/" count = 0 for fileName in os.listdir(targetDir): f = targetDir + fileName s = os.stat(f) times = (s[stat.ST_MTIME], s[stat.ST_MTIME]) mtime = datetime.datetime.fromtimestamp(s[stat.ST_MTIME]) metadata = pyexiv2.ImageMetadata(f) metadata.read() dateTimeTag = metadata['Exif.Image.DateTime'] dateTimeOriginalTag = metadata['Exif.Photo.DateTimeOriginal'] dateTimeDigitizedTag = metadata['Exif.Photo.DateTimeDigitized'] thumbnailDateTimeTag = metadata['Exif.Thumbnail.DateTime'] dateTimeTag.value = dateTimeTag.value + datetime.timedelta(days = 366) dateTimeOriginalTag.value = dateTimeOriginalTag.value + datetime.timedelta(days = 366) dateTimeDigitizedTag.value = dateTimeDigitizedTag.value + datetime.timedelta(days = 366) thumbnailDateTimeTag.value = thumbnailDateTimeTag.value + datetime.timedelta(days = 366) print "convert done " + f + " ->" + dateTimeTag.raw_value metadata.write() count += 1 print str(count) + " files done"
それにしてもぱぱっとubuntuとか必要な環境を作れちゃうvagrantはほんと便利ですなー。