2012-08-07 86 views

回答

27

您是否試用過exifr寶石?從文檔

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 
+0

謝謝Kulbir Saini,因爲exif寶石的工作。 – 2012-08-07 06:56:16

+0

after_photo_post_process:copy_exif_data 私人 DEF copy_exif_data EXIF = :: EXIFR JPEG.new(photo.queued_for_write [:原始]) self.exif_value = EXIF 端 這一點,我正在使用的工作代碼。 – 2012-08-07 06:58:08

+0

使用最終代碼更新了問題。批准後將可見。 – 2012-08-07 07:10:48

5

您可以試着mini_exiftool寶石,爲exiftool命令行工具的包裝。

雖然gem需要你實際安裝命令行工具,但結果是你得到的很多更多的權力。與僅支持JPG和TIF文件的exifr相比,exiftool支持huge number of file formats。它還支持讀取寫入exif數據,而exifr僅支持讀取。

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 

這是我使用的工作代碼。

8

有3個寶石來做到這一點:

  1. mini_exiftool:ExifTool命令行包裝
  2. exifr:純Ruby
  3. exif:C擴展(由我)

如果你想寫或編輯EXIF標籤,你應該選擇mini_exiftool,它的功能更強大但速度非常慢,如下所示的基準,exif比exifr快8倍,而120比mini_exiftool的0倍。

基準:

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一個嘗試。

+0

包括基準測試的好工作。您還應該包括運行哪些命令來生成這些基準,否則,無法驗證。 ;) – 2017-01-30 16:27:51

+1

@JoshPinter現在它已包含在內。感謝您的提醒。 = D – 2017-01-30 17:58:30

+0

幹得好。謝謝! – 2017-01-30 20:53:57