pythonでJpeg画像のexifを編集する

ある時子供を撮影するのによく使っているデジカメNEX-5の初期設定を誤ったらしく、全部の写真の日付が一年前になっていることに気づいた。

印刷する時に日付を入れる場合は全部一年ずれて日付がついてしまうので、今までNEX-5で撮った写真のexifを書き換えるためのスクリプトを書いた。



とりあえずpythonexifをいじるために調べて最初に出てきたのは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はほんと便利ですなー。