Choorker's Field Notes.

トップウォータープラッギング

画像データから撮影日を抽出し、テーブルに保存する

choorkerをリニューアルするため、コツコツと開発中。
choorkerでは、ユーザが投稿した画像から撮影日を抜き出し、それを「釣った日時」として保存している。なのでユーザは画像を投稿する際に、わざわざ日時を入力しなくてもいい。

該当のモデルにて下記のようなロジックを組み込む。
画像のアップロードにはcarriewave、編集はminimagickを使用している。

class Sample < ActiveRecord::Base
  mount_uploader :image, ImageUploader

  before_save :get_exif

  def get_exif
    img = MiniMagick::Image.open(image.path)
    datetime = img.exif["DateTimeOriginal"]

    if datetime.nil? then
      date = DateTime.now
    else
      date = DateTime.strptime(datetime, '%Y:%m:%d %H:%M:%S')
    end

    # 取得した日付をcatched_atに保存
    self.catched_at = date
  end
end

※ 関係無い部分のコードは省略
DateTimeOriginalが取得できなかった場合は、投稿日時を登録するようにしている。