ruby-on-rails - imagenes - storage rails
Cómo recuperar información EXIF de una imagen en Rails (4)
Estoy utilizando el clip de Rails para mostrar las imágenes en mi página. Quiero saber cómo recuperar la información EXIF de una imagen (como dimensiones, modelo de cámara, altura, anchura, etc.). ¿Puede alguien ayudarme?
¡¡¡Gracias!!!
¿Le exifr una oportunidad a exifr gem? De la documentación
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
Hay 3 gemas para hacer esto:
- mini_exiftool : contenedor de línea de comandos de ExifTool
- exifr : Rubí Puro
- exif : C Extension (por mi)
Si desea escribir o editar la etiqueta EXIF, debe elegir mini_exiftool, es más potente pero muy lento, ya que el punto de referencia que se muestra a continuación, exif es 8 veces más rápido que exifr, y 1200 veces más que el de mini_exiftool.
punto de referencia:
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
salida:
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 es un poco excesivo para recuperar solo datos. Entonces, en su caso, creo que debería usar exifr en JRuby, o darle una oportunidad a exif en MRI.
Puede probar la gema mini_exiftool , una envoltura para la herramienta de línea de comandos exiftool .
Si bien la gema requiere que realmente instales la herramienta de línea de comandos, el resultado es que obtienes mucha más potencia. En comparación con exifr, que solo le brinda soporte para archivos JPG y TIF, exiftool admite una gran cantidad de formatos de archivo . También admite la lectura y escritura de datos exif, mientras que exifr solo admite lectura.
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
Este es el código de trabajo que estoy usando.