2011-08-22 32 views
5

Javaを使用してjpgからカメラ関連情報を抽出することを検討しています。私は周りを見回しましたが、私の問題の解決策を見つけることができませんでした。 Mac(OS X 10.7)でApertureから写真をエクスポートしていて、ファイル情報で利用可能なApertureのデータを使用したいとします。Javaで画像からカメラ関連情報を抽出するにはどうすればよいですか?

アイデア?

私はこのような写真から次元とキーワードを抽出することを望んでいます:80.167.88.49 /masters/test.html。現在、メタデータ抽出プログラムを使用しようとすると例外が発生します。 Apertureが処理できない情報を追加しているのかどうかはわかりませんが、Apertureのすべての写真に例外がスローされます。

Exception in thread "main" java.lang.NoClassDefFoundError: com/adobe/xmp/XMPException 
    at com.drew.imaging.jpeg.JpegMetadataReader.extractMetadataFromJpegSegmentReader(Unknown Source) 
    at com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(Unknown Source) 
    at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source) 
    at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source) 
    at ImageScaler.main(ImageScaler.java:141) 
Caused by: java.lang.ClassNotFoundException: com.adobe.xmp.XMPException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 5 more 

コード:

public static void main (String[] args){ 

    File image = new File("/Users/peterla/Desktop/P8214462.jpg"); 

    Metadata metadata = null; 
    try { 
    metadata = ImageMetadataReader.readMetadata(image); 
    } catch (ImageProcessingException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

    Directory directory; 

    // Keywords 
    directory = metadata.getDirectory(IptcDirectory.class); 
    String keywords[] = directory.getStringArray(IptcDirectory.TAG_KEYWORDS); 

    // Dimensions 
    directory = metadata.getDirectory(JpegDirectory.class);  
    String height = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT); 
    String width = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH);  
} 

答えて

4

Metadata Extractorは、多くのデジタル画像形式からいくつかのタイプのメタデータを読み取るためのシンプルなインターフェイスを備えています。これには、JPEG画像で使用されるEXIFメタデータ形式が含まれます。ライブラリは良いJavadocスタイルdocumentationを持っています。

ライブラリへの最初のエントリポイントは、ImageMetadataReaderオブジェクトです。

Getting Startedページには、EXIF形式のメタデータから特定のタグの値を取得する方法の良い例が含まれています。

更新:抽出キーワードと寸法

Directory directory; 
// Keywords 
directory = metadata.getDirectory(IptcDirectory.class); 
String keywords[] = directory.getStringArray(IptcDirectory.TAG_KEYWORDS); 

// Dimensions 
directory = metadata.getDirectory(JpegDirectory.class);  
String height = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT); 
String width = directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH); 

代替

代替のための例は、組み込みJavaのImageIOライブラリとSanselanが含まれます。

+0

本当に素晴らしいです。例を使って実装するのは非常に簡単ですが、私は写真で作業するのが難しいです。私はApertureが抽出者が処理できるよりも多くの情報を追加するかもしれないと思う。私はこのような写真からDimensionsとキーワードを抽出したいと思っています:http://80.167.88.49/masters/test.html –

+0

@Peter Larsen DimensionsとKeywordsを抽出するためのサンプルコードを追加しました。私はあなたのサンプル画像でそれをテストし、それは私のために働く。あなたがもっと助けが必要な場合は教えてください。 –

+0

私は何が起こっているのかわかりませんが、私はあなたがテストしたのと同じ画像で次のエラーを受けています。 –

4

あなたはEXIFメタデータを読み取るためのライブラリを必要としています。このblog postでImageIOを使って行う方法の例があります。

必要に応じて検討したいライブラリもあります。例えば、MetadataExtractorまたはSanselanです。

1

jhead、JPEG EXIFヘッダー操作ツールは、別のオプションです。

関連する問題