スキャンした写真のEXIF 日付を書き換える

スキャンした写真の場合、スキャンした日付でEXIFが書き込まれることがあります。

簡単にEXIFの日付を変更する方法を探したのですが、どうやらあまり簡単ではないようです。

EXIFを操作するツールとしてはExifTool by Phil Harveyがあります。 ただし、日付は指定した日時には直接変更できず、現状のEXIFのDateTimeOriginalの日付からの差分を指定する必要があります。

今回の場合、そのままだと使いにくそうなので、プログラム言語経由で扱えるものを探しました。 Rubyではmini_exiftoolというgemがあります。 今回はこれを使ってみました。

基本的にはMini Tutorialにある例のままです。

下の例では入力で渡すファイルをすべて2000年7月11日12時30分45秒の日付にします。

#!/usr/bin/ruby

require 'mini_exiftool'
require 'time'


ARGV.each{|filename|
  begin
  photo = MiniExiftool.new filename
  rescue MiniExiftool::Error => e
    $stderr.puts e.message
    exit -1
  end

#  p timeOrig = photo[:DateTimeOriginal]
  p timeOrig = photo.date_time_original

  p timeFake = Time.new(2000, 7, 11, 12, 30, 45)

  p timeDiff = timeFake - timeOrig

  p photo.date_time_original = timeOrig + timeDiff

  save_ok = photo.save
  if save_ok
    fmt = '%Y-%m-%d %H:%M:%S'
    puts "#{filename} changed: #{timeOrig.strftime(fmt)} -> #{(timeOrig + timeDiff).strftime(fmt)}"
  else
    puts "#{filename} could not be changed"
  end
}