7

我对用 java api 或类似的东西解析 exiftool 结果很感兴趣。

我一直在研究,但我没有找到任何例子。例如,如何在我的 java 项目中获得这些结果?

ExifTool 版本号:8.22

文件名:ExifTool.jpg

目录:t/images 文件

大小:24 kB 文件修改日期/时间

等等。我正在寻找“如何”或类似的东西。

4

3 回答 3

7

ExifTool(用于 Java)被设计为 Phil Harvey 的 ExifTool 的简单易用且健壮的 Java 抽象。在 imgscalr 项目伞下孵化了一段时间后,我刚刚在上周发布了第一个公开版本。

该项目采用商业友好的 Apache 2 许可证。

我对库的目标不仅仅是从调用者那里抽象出外部流程执行代码(就像大多数其他抽象层似乎在做的那样),而是实际设计一个如此紧密集成和弹性的包装器(我将澄清我意思是稍后),您对待 ExifTool 类的实例与 ExifTool 本身是用 Java 编写的完全一样。

在这个初始版本中,我支持读取标签数据(将在未来版本中添加写入),它就像这样简单:

File image = // path to some image
ExifTool tool = new ExifTool();

Map<Tag, String> valueMap =
    tool.getImageMeta(image, Tag.GPS_LATITUDE, Tag.GPS_LONGITUDE);

System.out.println("Lat: " + valueMap.get(Tag.GPS_LATITUDE) +
    "\tLong: " + valueMap.get(Tag.GPS_LONGITUDE));

还支持在新的“守护程序模式”(-stay_open True cmd 行)中使用 ExifTool,并且打开对它的支持就像创建 ExifTool 实例一样简单,如下所示:

ExifTool tool = new ExifTool(Feature.STAY_OPEN);

关于如何使用 ExifTool 类的文档非常丰富,涵盖了从设计到性能再到线程安全的所有内容。

除了从 Java 中简单地使用 ExifTool 之外,该类还采用了大量的预防措施来最大限度地减少运行时问题,并正确捕获和报告可能以有据可查的方式出现的任何和所有错误(而不是让意外异常冒泡)来自核心 Java 类)。

我对这种异常处理和错误恢复非常迂腐,因为该类旨在允许您在高可用性环境(如繁忙的 Web 应用程序)中使用 ExifTool。我不只是想包装简单的 Process 对象,然后在发生爆炸时举起双手。我知道我自己(以及使用该类的任何其他人)都需要一个设计良好的 API 来轻松恢复错误。

例如,尝试在守护程序模式下使用 ExifTool 将导致该类实际检查 ExifTool 的底层安装是否支持该功能,并抛出 UnsupportedFeatureException 并提供有关如何解决该问题的建议(如果不支持)。

除了前置条件检查之外,为了确保类的使用(即在守护程序模式下)不会泄漏本机操作系统进程以及用于与它们通信的 Input/OutputStreams,该类提供了一个自动清理线程在指定的不活动时间间隔(默认为 10 分钟)后,将干净地关闭外部进程和读/写流,使 ExifTool 的空闲实例轻量级且易于保留以供重复使用。

所有资源都会在下一次调用类时重新初始化以解析更多元数据,因此无需丢弃并重新创建新实例。此外,清理线程仅在长时间不活动后执行,而不是按设定的时间表执行。您可以将间隔设置为您想要的任何时间,或者完全关闭清理线程并自己管理清理(只需调用 close())。

这些设计都是我最终目标的一部分,即让 ExifTool 无缝、高效且轻松地集成到 Java 应用程序中。

您可以查看项目主页面以获取有关项目、用法、源代码、下载链接等的更多信息,或者如果您愿意,可以直接跳转到GitHub并查看代码。

于 2011-08-21T16:04:03.983 回答
3

查看 ExifTool 论坛中的回复:

http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2697.0.html

于 2010-06-11T16:17:24.830 回答
0

我不知道exiftool,但我之前用过MediaUtil在java中读写exif标签(我用它来自动jpeg图像旋转)

于 2010-06-11T09:58:49.873 回答