ExifTool http://www.thebuzzmedia.com/software/exiftool-enhanced-java-integration-for-exiftool/(针对 Java)被设计为 Phil Harvey 的 ExifTool 的简单易用且健壮的 Java 抽象。在 imgscalr 项目保护伞下孵化该项目一段时间后,我刚刚在上周首次公开发布。
该项目采用商业友好的 Apache 2 许可证。
我对该库的目标不仅仅是从调用者那里抽象出外部流程执行代码(就像大多数其他抽象层似乎所做的那样),而是实际设计一个紧密集成且具有弹性的包装器(我将澄清我的意思)此处的意思是稍后),您可以像 ExifTool 本身是用 Java 编写的那样对待 ExifTool 类的实例。
在这个初始版本中,我支持读取标签数据(将在未来版本中添加写入),就像这样简单:
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类 http://www.thebuzzmedia.com/downloads/software/exiftool/javadoc/com/thebuzzmedia/exiftool/ExifTool.html内容广泛,涵盖从设计到性能再到线程安全的所有内容。
除了从 Java 中简单地使用 ExifTool 之外,该类还采用了大量的预防措施来最大限度地减少运行时问题,并正确捕获和报告可能以有据可查的方式出现的任何和所有错误(而不是让意外的异常冒泡)来自核心 Java 类)。
我对异常处理和错误恢复非常迂腐,因为该类旨在允许您在高可用性环境(如繁忙的 Web 应用程序)中使用 ExifTool。我不只是想包装简单的 Process 对象,然后在有东西爆炸时把手举到空中。我知道我自己(以及使用该类的任何其他人)需要一个设计良好的 API 来轻松恢复错误。
例如,尝试在守护程序模式下使用 ExifTool 将导致该类实际检查 ExifTool 的基础安装是否支持该功能,并抛出 UnsupportedFeatureException 并提供有关如何解决该问题(如果不支持)的建议。
除了前置条件检查之外,为了确保该类的使用(即在守护进程模式下)不会泄漏本机操作系统进程以及用于与其通信的输入/输出流,该类还提供了一个自动清理线程之后指定的不活动间隔 http://www.thebuzzmedia.com/downloads/software/exiftool/javadoc/com/thebuzzmedia/exiftool/ExifTool.html#PROCESS_CLEANUP_DELAY(默认为 10 分钟)将彻底关闭外部进程和读/写流,使 ExifTool 的空闲实例变得轻量级且易于保留以供重复使用。
所有资源都会在下次调用类时重新初始化以解析更多元数据,因此无需丢弃并重新创建新实例。此外,清理线程仅在长时间不活动后执行,而不是按照设定的时间表执行。您可以将间隔设置为您想要的任何值,或者完全关闭清理线程并自行管理清理(只需调用 close())。
这些设计都是我最终目标的一部分,即使 ExifTool 无缝、高性能且轻松地集成到 Java 应用程序中。
您可以查看主项目页面 http://www.thebuzzmedia.com/software/exiftool-enhanced-java-integration-for-exiftool/有关项目、用途、来源、下载链接等的更多信息,或者您可以直接跳到GitHub https://github.com/thebuzzmedia/exiftool如果您愿意的话,可以查看代码。