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

Ruk*_*jan 19 ruby exif ruby-on-rails paperclip

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

谢谢!!!

Kul*_*ini 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
Run Code Online (Sandbox Code Playgroud)


Jia*_*ang 8

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

  1. mini_exiftool:ExifTool命令行包装器
  2. exifr:纯Ruby
  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
Run Code Online (Sandbox Code Playgroud)

输出:

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)
Run Code Online (Sandbox Code Playgroud)

mini_exiftool有点矫枉过正,只能检索数据.所以在你的情况下,我认为你应该在JRuby中使用exifr,或者在MRI中尝试exif.


Chr*_*erg 6

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

而创业板需要你要安装的命令行工具,其结果是,你得到了很多更多的权力.与只支持JPG和TIF文件的exifr相比,exiftool支持大量的文件格式.它还支持读取写入exif数据,而exifr仅支持读取.