22

我正在使用 Rails 回形针在我的页面中显示图像。我想知道如何检索图像的 EXIF 信息(如尺寸、相机型号、高度、宽度等)。谁能帮帮我???

谢谢!!!

4

4 回答 4

29

试过 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
于 2012-08-07T06:13:23.883 回答
10

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

  1. mini_exiftool : ExifTool 命令行包装器
  2. exifr : 纯红宝石
  3. exif : C 扩展(由我)

如果你想编写或编辑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。

于 2014-10-31T04:26:16.293 回答
6

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

虽然 gem 要求您实际安装命令行工具,但结果是您获得了更多的功能。与只支持 JPG 和 TIF 文件的 exifr 相比,exiftool 支持大量的文件格式。它还支持exif数据的读写,exifr只支持读取。

于 2012-08-07T06:33:24.680 回答
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 

这是我使用的工作代码。

于 2012-08-07T06:58:37.980 回答