ページに画像を表示するために Rails ペーパークリップを使用しています。画像の EXIF 情報 (寸法、カメラのモデル、高さ、幅など) を取得する方法を知りたいです。
ありがとう!!!
ページに画像を表示するために Rails ペーパークリップを使用しています。画像の EXIF 情報 (寸法、カメラのモデル、高さ、幅など) を取得する方法を知りたいです。
ありがとう!!!
exifr gemを試してみましたか?ドキュメントから
EXIFR::JPEG.new('IMG_6841.JPG').width # => 2272
EXIFR::JPEG.new('IMG_6841.JPG').height # => 1704
EXIFR::JPEG.new('IMG_6841.JPG').exif? # => true
EXIFR::JPEG.new('IMG_6841.JPG').model # => "Canon PowerShot G3"
EXIFR::JPEG.new('IMG_6841.JPG').date_time # => Fri Feb 09 16:48:54 +0100 2007
EXIFR::JPEG.new('IMG_6841.JPG').exposure_time.to_s # => "1/15"
EXIFR::JPEG.new('IMG_6841.JPG').f_number.to_f # => 2.0
これを行うための 3 つの gem があります。
EXIF タグを作成または編集する場合は、mini_exiftool を選択する必要があります。これはより強力ですが、非常に低速です。以下に示すベンチマークのように、exif は exifr の 8 倍、mini_exiftool の 1200 倍高速です。
基準:
require 'benchmark'
require 'mini_exiftool'
require 'exifr'
require 'exif'
N = 50
FILE_PATH = File.expand_path('../../spec/sample.jpg', __FILE__)
Benchmark.bmbm do |x|
x.report 'mini_exiftool' do
N.times{ MiniExiftool.new(FILE_PATH).image_width }
end
x.report 'exifr' do
N.times{ EXIFR::JPEG.new(FILE_PATH).width }
end
x.report 'exif' do
N.times{ Exif::Data.new(FILE_PATH).image_width }
end
end
出力:
Rehearsal -------------------------------------------------
mini_exiftool 0.150000 0.050000 12.390000 ( 12.546417)
exifr 0.090000 0.000000 0.090000 ( 0.091090)
exif 0.010000 0.000000 0.010000 ( 0.010343)
--------------------------------------- total: 12.490000sec
user system total real
mini_exiftool 0.150000 0.050000 12.400000 ( 12.540122)
exifr 0.080000 0.000000 0.080000 ( 0.083251)
exif 0.010000 0.000000 0.010000 ( 0.009855)
mini_exiftool は、データを取得するだけでは少しやり過ぎです。したがって、あなたの場合、JRubyでexifrを使用するか、MRIでexifを試してみるべきだと思います。
exiftoolコマンドライン ツールのラッパーであるmini_exiftool gem を試すことができます。
gem では実際にコマンドライン ツールをインストールする必要がありますが、その結果、より多くの機能が得られます。JPG および TIF ファイルのみをサポートする exifr と比較して、exiftool は膨大な数のファイル形式をサポートします。また、exif データの読み取りと書き込みもサポートしていますが、exifr は読み取りのみをサポートしています。
after_photo_post_process :copy_exif_data
private
def copy_exif_data
exif =EXIFR::JPEG.new(photo.queued_for_write[:original])
self.exif_value = exif
end
これは私が使用している作業コードです。