2012-03-31 1 views
2

Ich versuche, die EXIF-Informationen für Bilder mit Werten für das EXIF-Attribut "keywords" abzurufen. Ich habe EXIF-Informationen mit mini_magick erfolgreich durch einfaches Lesen ein Bild öffnen und verwenden:Wie bekomme ich EXIF-Keywords mit mini_magick in einer Rails App?

image["EXIF:Model"] 

Aus irgendeinem Grund keine der folgenden werden Schlüsselwörter für ein Bild zurück, die ich kenne, hat sie:

image["EXIF:Keywords"] 
image["EXIF:XPKeywords"] 
image["EXIF:Subject"] 

Ich habe bestätigt, dass das fragliche Bild diese Informationen mit diesem Dienstprogramm hat: http://regex.info/exif.cgi

Hat mini_magick nur Zugriff auf bestimmte EXIF-Werte? Es scheint so seltsam, dass ich auf bestimmte EXIF-Informationen zugreifen kann, aber nicht auf andere.

Antwort

2

EXIF metadata wird von der Kamera erstellt, daher enthält es nur technische verwandte Sachen. Auf was Sie eigentlich zugreifen möchten, ist IPTC und XMP.

Imagemagick, das hinter mini_magick steht, erlaubt read IPTC, z.B. image["%[IPTC:2:25]"] für Schlüsselwörter (Update: beachten Sie die Leistungsprobleme, siehe Kommentare).

Wie für XMP, ich kenne keine einfache Möglichkeit, dies zu tun. Sie können versuchen,

`identify -verbose #{your_filename}` 

und dann graben Linien auszuführen, die xmp umfassen.

+0

Danke für die Links. Sehr hilfreich. Bei Verwendung von mini_magick gibt der Befehl image ["IPTC: 2: 25"] jedoch einfach "IPTC: 2: 25" zurück - ich glaube nicht, dass mini_magick den Zugriff auf IPTC-Daten wie EXIF ​​unterstützt. Ich habe jedoch einen Workaround für diese Situation gefunden, den ich in einer Antwort posten werde. – retailevolved

+0

@retailevolved Sie haben recht, mini_magick [unterstützt IPTC nicht] (https://github.com/probablablecorey/mini_magick/blob/master/lib/mini_magick.rb#L204). Ich war mir sicher, dass sie alle Funktionen rund um Imagemagick implementiert hatten, aber ich lag falsch. –

+0

@retailevolved Ich habe einen Weg gefunden, IPTC zu retreive, siehe meine aktualisierte Antwort. –

1

Wie Nash Bridges darauf hingewiesen hat, musste ich tatsächlich auf XMP-Daten zugreifen. Ich habe einen Weg gefunden, dies mit zwei Edelsteinen zu tun: exifr und xmp. Nachdem diese beiden Edelsteine ​​zu installieren, habe ich den folgenden Code in meinem Controller, der das Hochladen von Bildern verarbeitet:

tags = XMP.parse(EXIFR::JPEG.new(StringIO.new(params[:file].read))).dc.subject.join(',').downcase 

Ich war nicht in der Lage, einen Weg zu finden, dies mit nur mini_magick zu tun, obwohl ich sicher bin, dass es wäre möglich, indem die von der "to_blob" -Methode eines mini_magick-Bildmodells ausgegebenen Rohdaten analysiert werden.

Verwandte Themen