我希望使用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
代码:
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);
}
答案 0 :(得分:4)
您需要一个库来阅读EXIF元数据。有一个如何使用ImageIO在blog post上执行此操作的示例。
根据您的需要,您可能还需要考虑其他库。例如MetadataExtractor或Sanselan。
答案 1 :(得分: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);
<强>替代强>
答案 2 :(得分:1)
jhead
是一个JPEG EXIF标题处理工具,是另一种选择。