2012-03-31 11 views
2

EXIFの "keywords"属性の値を持つイメージのEXIF情報を取得しようとしています。私が成功しただけで、画像を開いて使用することによりmini_magickを使用してEXIF情報を読んでいる:Railsアプリケーションでmini_magickを使ってEXIFキーワードを取得するには?

image["EXIF:Model"] 

を何らかの理由で、私が知っている画像のキーワードを返します。以下のいずれもがそれらを持っていない:

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

私は問題の画像にこのユーティリティを使ってこの情報があることを確認しました:http://regex.info/exif.cgi

mini_magickは特定のEXIF値にしかアクセスできませんか?私は特定のEXIF情報にアクセスすることができますが、他の情報にはアクセスできないように思えます。

答えて

2

EXIF metadataはカメラで作成されているため、技術関連のもののみが含まれています。実際にアクセスしたいのはIPTCXMPです。

mini_magickの後ろにあるImagemagickは、read IPTCを許可します。キーワードのimage["%[IPTC:2:25]"]更新:パフォーマンスの問題に注意してください、コメントを参照してください)。

XMPについては、これを簡単に行う方法はわかりません。あなたはxmpが含ま

`identify -verbose #{your_filename}` 

、その後、グラブラインを実行しようとすることができます。

+0

リンクありがとうございます。非常に便利。しかし、mini_magickを使用している場合、コマンドイメージ["IPTC:2:25"]は単に "IPTC:2:25"を返すだけです - 私はmini_magickがEXIFと同じようにIPTCデータへのアクセスをサポートしているとは思いません。私はこの状況の回避策を見つけましたが、回答に投稿します。 – retailevolved

+0

@retailevolved mini_magickは[IPTCをサポートしていません](https://github.com/probablycorey/mini_magick/blob/master/lib/mini_magick.rb#L204)です。彼らはImagemagickの周りにすべての機能を実装していたと確信していましたが、間違っていました。 –

+0

@retailevolved私はIPTCを取得する方法を見つけました。私の更新された答えを見てください。 –

1

Nash Bridgesが指摘しているように、私は実際にXMPデータにアクセスする必要がありました。 exifrとxmpという2つの宝石を使ってこれを行う方法が見つかりました。私はそれが可能だろうと確信しているものののみmini_magickでこれを行うための方法を見つけることができませんでした

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

:これらの宝石の両方をインストールした後、私は画像のアップロードを処理する私のコントローラで次のコードを使用しましたmini_magick Imageモデルの "to_blob"メソッドによって出力された生データを解析することで可能です。

関連する問題