如何在Rails中检索图像的EXIF信息

时间:2012-08-07 05:17:51

标签: ruby-on-rails ruby paperclip exif

我正在使用Rails回形针在我的页面中显示图像。我想知道如何检索图像的EXIF信息(如尺寸,相机型号,高度,宽度等)。任何人都可以帮我解决???

谢谢!

4 个答案:

答案 0 :(得分:28)

您是否尝试过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

答案 1 :(得分:8)

有3个宝石可以做到这一点:

  1. mini_exiftool:ExifTool命令行包装器
  2. exifr:纯Ruby
  3. exif:C Extension(由我)
  4. 如果你想编写或编辑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。

答案 2 :(得分:5)

您可以尝试mini_exiftool gem,exiftool命令行工具的包装。

虽然gem要求您实际安装命令行工具,但结果是您获得了更强大的批次。与只支持JPG和TIF文件的exifr相比,exiftool支持huge number of file formats。它还支持读取exif数据的,而exifr只支持读取。

答案 3 :(得分:0)

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 

这是我使用的工作代码。