Я использую paperclip Rails для отображения изображений на моей странице. Я хочу знать, как получить информацию EXIF изображения (например, размеры, модель камеры, высота, ширина и т.д.). Может ли кто-нибудь помочь мне?
Спасибо!!!
Я использую paperclip 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 камня:
Если вы хотите написать или отредактировать тег EXIF, вы должны выбрать mini_exiftool, он более мощный, но очень медленный, как показанный ниже тест, exif в 8 раз быстрее exifr и в 1200 раз больше, чем у mini_exiftool.
тест:
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 является немного избыточным, чтобы извлекать данные. Поэтому в вашем случае, я думаю, вы должны использовать exifr в JRuby или дать exif попробовать в МРТ.
Вы можете попробовать mini_exiftool gem, оболочку для exiftool инструмент командной строки.
В то время как камень требует, чтобы вы действительно установили инструмент командной строки, в результате вы получите больше лота. По сравнению с exifr, который поддерживает только файлы JPG и TIF, 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
Это рабочий код, который я использую.