在java中如何从图像中提取相机相关信息?

Pet*_*sen 5 java macos metadata photo

我希望使用Java从jpg中提取相机相关信息.我环顾四周,但一直无法找到问题的解决方案.我在我的Mac(OS X 10.7)上从Aperture导出我的照片,并希望使用文件信息中提供的Aperture数据.

有任何想法吗?

我希望从像这样的照片中提取尺寸和关键词: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
Run Code Online (Sandbox Code Playgroud)

码:

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);     
}
Run Code Online (Sandbox Code Playgroud)

Way*_*inn 4

元数据提取器有一个简单的界面,可以从多种数字图像格式中读取多种类型的元数据。这包括jpeg 图像中使用的EXIF元数据格式。该库有很好的 Javadoc 风格的文档

该库的主要入口点是ImageMetadataReader对象。

入门页面有一个很好的介绍,包括一个很好的示例说明如何从 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);
Run Code Online (Sandbox Code Playgroud)

备择方案

替代方案包括内置的 java ImageIO库和Sanselan

  • @Peter-Larsen如果您使用的是该库的最新版本,请确保您的类路径中拥有它的 jar 和它的依赖库。 (2认同)