Подтвердить что ты не робот

Как получить информацию EXIF ​​изображения в Rails

Я использую paperclip Rails для отображения изображений на моей странице. Я хочу знать, как получить информацию EXIF ​​изображения (например, размеры, модель камеры, высота, ширина и т.д.). Может ли кто-нибудь помочь мне?

Спасибо!!!

4b9b3361

Ответ 1

Вы давали 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

Ответ 2

Для этого есть 3 камня:

  • mini_exiftool: оболочка командной строки ExifTool
  • exifr: Pure Ruby
  • exif: C Расширение (по мне)

Если вы хотите написать или отредактировать тег 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 попробовать в МРТ.

Ответ 3

Вы можете попробовать mini_exiftool gem, оболочку для exiftool инструмент командной строки.

В то время как камень требует, чтобы вы действительно установили инструмент командной строки, в результате вы получите больше лота. По сравнению с exifr, который поддерживает только файлы JPG и TIF, exiftool поддерживает огромное количество форматов файлов. Он также поддерживает чтение и запись exif-данных, тогда как exifr поддерживает только чтение.

Ответ 4

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 

Это рабочий код, который я использую.