java数据提取_元数据提取-Java

提问

我正在尝试创建一个从图像文件中提取元数据的程序.到目前为止,我已经设法创建了一个程序,该程序可以打印出所有元数据,但是我不知道如何指定该程序仅打印出某些内容(文件名,纬度,经度,访问日期).在过去的四个小时中,我一直在努力解决这个问题.这是我到目前为止的代码…

主类:

package metadata;

import com.drew.metadata.exif.*;

import com.drew.metadata.iptc.*;

import com.drew.metadata.jpeg.*;

public class MetaData {

public static void main(String[] args) {

ExtractTags extractAllTags = new ExtractTags();

//extractAllTags.getTags();

System.out.println("\n\n\n Has this ");

extractAllTags.getLatitude();

}

}

二等舱:

package metadata;

import com.drew.imaging.ImageMetadataReader;

import com.drew.imaging.ImageProcessingException;

import com.drew.metadata.Directory;

import com.drew.metadata.Metadata;

import com.drew.metadata.Tag;

import com.drew.metadata.exif.GpsDirectory;

import java.io.File;

import java.io.IOException;

import java.util.logging.Level;

import java.util.logging.Logger;

import com.drew.metadata.exif.*;

import com.drew.metadata.iptc.*;

import com.drew.metadata.jpeg.*;

public class ExtractTags {

String allTags;

String latitude;

File jpegFile = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\HTC Desire.jpg");

public String getTags() {

try {

Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);

for (Directory directory : metadata.getDirectories()) {

for (Tag allTags : directory.getTags()) {

System.out.println(allTags);

}

}

} catch (ImageProcessingException ex) {

Logger.getLogger(MetaData.class.getName()).log(Level.SEVERE, null, ex);

} catch (IOException ex) {

Logger.getLogger(MetaData.class.getName()).log(Level.SEVERE, null, ex);

}

return allTags;

}

public String getLatitude() {

try {

Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);

if (metadata.containsDirectory(GpsDirectory.class)) {

GpsDirectory gpsDir = (GpsDirectory) metadata.getDirectory(GpsDirectory.class);

GpsDescriptor gpsDesc = new GpsDescriptor(gpsDir);

System.out.println("Latitude: " + gpsDesc.getGpsLatitudeDescription());

}

} catch (ImageProcessingException ex) {

Logger.getLogger(ExtractTags.class.getName()).log(Level.SEVERE, null, ex);

System.out.println("Error 1");

} catch (IOException ex) {

Logger.getLogger(ExtractTags.class.getName()).log(Level.SEVERE, null, ex);

System.out.println("Error 2");

}

return latitude;

}

}

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: metadata/GpsDescriptor

at metadata.ExtractTags.getLatitude(ExtractTags.java:47)

at metadata.MetaData.main(MetaData.java:13)

Caused by: java.lang.ClassNotFoundException: metadata.GpsDescriptor

at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

at java.lang.ClassLoader.loadClass(ClassLoader.java:423)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

at java.lang.ClassLoader.loadClass(ClassLoader.java:356)

... 2 more

最佳答案

您可以使用Metadata.getDirectory(Class)获得您选择的Directory子类.每种类型的目录都有一个关联的描述符,可用于解释目录的原始数据.

例如,可以使用GpsDescriptor从GpsDirectory获取纬度,如下所示:

GpsDirectory gpsDir = (GpsDirectory) metadata.getFirstDirectoryOfType(GpsDirectory.class);

if (gpsDir != null) {

GpsDescriptor gpsDesc = new GpsDescriptor(gpsDir);

System.out.println("Latitude: " + gpsDesc.getGpsLatitudeDescription());

}

有关正在使用的特定描述符类型的信息,请参阅文档,以查看其提供的获取所需数据的方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值