2012-08-07 14 views

Antwort

27

Haben Sie exifr einen Edelstein versucht? Aus der Dokumentation

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

Dank Kulbir Saini, für Exif Edelsteine ​​seine Arbeit. –

+0

after_photo_post_process: copy_exif_data Privat def copy_exif_data exif = EXIFR :: JPEG.new (photo.queued_for_write [: Original]) self.exif_value = exif Ende dies funktioniert Code, den ich gewohnt bin. –

+0

Aktualisierte Frage mit endgültigem Code. Wird nach der Genehmigung sichtbar sein. –

5

könnten Sie versuchen, das mini_exiftool Juwel, einen Wrapper für das exiftool Befehlszeilentool.

Während der Edelstein erfordert, dass Sie tatsächlich das Befehlszeilentool installieren, ist das Ergebnis, dass Sie eine Los mehr Leistung erhalten. Im Vergleich zu exifr, das nur Unterstützung für JPG- und TIF-Dateien bietet, unterstützt exiftool einen . Es unterstützt auch das Lesen von und Schreiben von Exif-Daten, während Exifr nur das Lesen unterstützt.

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 

Dies ist Arbeitscode, den ich verwende.

8

Es gibt 3 Edelsteine, dies zu tun:

  1. mini_exiftool: ExifTool Befehlszeilen Wrapper
  2. exifr: Reiner Rubin
  3. exif: C Verlängerung (von mir)

Wenn Sie möchten EXIF-Tag schreiben oder bearbeiten, sollten Sie mini_exiftool wählen, es ist leistungsfähiger, aber sehr langsam, wie der unten gezeigte Benchmark, exif ist 8-mal schneller als exifr und 120 0 Mal als das von mini_exiftool.

Benchmark:

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 

Ausgang:

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 ist ein bisschen übertrieben, um nur Daten abrufen. Also in Ihrem Fall, ich denke, Sie sollten Exifr in JRuby verwenden, oder Exif im MRI versuchen.

+0

Gute Arbeit mit Benchmarks. Sie sollten auch angeben, welche Befehle ausgeführt wurden, um diese Benchmarks zu generieren, andernfalls ist es unmöglich, sie zu validieren. ;) –

+1

@JoshPinter Jetzt ist es inklusive. Danke für deine Erinnerung. = D –

+0

Gute Arbeit. Vielen Dank! –

Verwandte Themen