1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby + RMagic or EXIF Reader で EXIF の撮影日時情報 DateTimeOriginal を取得する

Last updated at Posted at 2017-02-27

サンプルコード

require 'time'

class ExifReader

  def initialize
    @loadable_rmagick = loadable_rmagick?
    @loadable_exifr = loadable_exifr?
  end

  def to_s
    "[#{self.class}]loadable rmagick: #{@loadable_rmagick}, loadable exifr: #{@loadable_exifr}"
  end

  # RMagick が使える場合は true を返す
  def loadable_rmagick?
    begin
      require 'rmagick'
      true
    rescue LoadError => e
      false
    end
  end

  # EXIF Reader が使える場合は true を返す
  def loadable_exifr?
    begin
      require 'exifr'
      true
    rescue LoadError => e
      false
    end
  end

  # 撮影日時を Time オブジェクトで返す (撮影日時情報が無い場合はnilを返す)
  def datetime_original(file)
    if @loadable_rmagick
      datetime_original_by_rmagick(file)
    elsif @loadable_exifr
      datetime_original_by_exifr(file)
    else
      nil
    end
  end

  def datetime_original_by_rmagick(file)
    image = Magick::Image.read(file).first
    dt = image.get_exif_by_entry('DateTimeOriginal')
    if dt[0][1] != nil
      Time.strptime(dt[0][1], '%Y:%m:%d %H:%M:%S')
    else
      nil
    end
  end

  def datetime_original_by_exifr(file)
    EXIFR::JPEG.new(file).date_time_original
  end
end

er = ExifReader.new()
puts er

file = ARGV[0]
puts 'RMagick: ' + er.datetime_original_by_rmagick(file).to_s if er.loadable_rmagick?
puts 'Exifr: ' + er.datetime_original_by_exifr(file).to_s if er.loadable_exifr?
puts er.datetime_original(file)

サンプルコードの実行結果

$ ruby datetime_original.rb sample.jpg 
[ExifReader]loadable rmagick: true, loadable exifr: true
RMagick: 2017-02-04 11:06:44 +0900
Exifr: 2017-02-04 11:06:44 +0900
2017-02-04 11:06:44 +0900

参考資料

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?