【问题标题】:Java api to exiftoolJava api 到 exiftool
【发布时间】:2011-12-12 11:56:51
【问题描述】:

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

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

ExifTool 版本号:8.22

文件名: ExifTool.jpg

目录:t/images 文件

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

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

【问题讨论】:

    标签: java exiftool


    【解决方案1】:

    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);
    

    how to use the ExifTool class 上的文档内容丰富,涵盖了从设计到性能再到线程安全的方方面面。

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

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

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

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

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

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

    您可以查看main project page 以获取有关项目、用法、来源、下载链接等的更多信息,或者您可以直接跳转到GitHub 并根据需要查看代码。

    【讨论】:

    • @chinna_82 它取决于源图像 - 如果您查看 ExifTool for Java 的源代码,则 TITLE 被定义为寻找“XPTitle”标签数据和关键字(注意“S”)是寻找“XPKeywords”标签——你要确保你的源图像中有数据才能工作。如果您需要寻找其他标签,您可以分叉代码,定义新的 ENUM 类型并使用该类。如果它适合你,请将拉取请求提交回项目,我会审查并接受它。
    • 它可以支持除图像文件以外的其他文件..如AI文件或PSD文件
    • ExifTool for Java 包装了本机“exiftool”并对源文件执行一组标签 - 如果 Phil 的 exiftool 支持该文件,则 ExifTool for Java 支持它。 (总而言之:“是”)
    • 该工具的当前积极维护版本位于github.com/mjeanroy/exiftool
    • @RiyadKalla 非常感谢您的努力,当我访问源代码时,似乎代码(甚至是 im4Java 等库的代码)强烈依赖于主机上 exifTool 的存在。我的意思是,如果代码运行平台上不存在 ExifTool,则此代码无法派生元数据标签,使其依赖于平台。还有其他方法可以读取元数据标签吗?注意:我使用 apache Commons 映像库来删除元数据标签,但删除后我也可以通过 exifTool 看到标签。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多