【问题标题】:Java library for reading and writing IPTC metadata to JPEG and TIFF用于将 IPTC 元数据读取和写入 JPEG 和 TIFF 的 Java 库
【发布时间】:2011-04-20 13:58:19
【问题描述】:


有谁知道一些开源 Java 库,用于读取和写入 IPTC 元数据到 JPEG 和 TIFF?现在我正在使用 Apache Sanselan。不幸的是,它只能读取 IPTC,不能写入 (http://commons.apache.org/sanselan/formatsupport.html)。
非常感谢您的帮助。
丹尼斯。

【问题讨论】:

  • 有一个新的选择here - 它可以读、写IPTC、EXIF、ADOBE、ICCProfile、缩略图等

标签: java jpeg tiff iptc


【解决方案1】:

这似乎是一个很老的问题,但以下是一些有用的信息:

可以使用 Apache Commons Imaging(以前的 Sanselan)或 Metadata Extractor(通过 draw noaks)读取 EXIF、IPTC..等元数据。

可以使用 Apache Commons Imaging 使用以下类来完成元数据的编写:

EXIF - ExifRewriter (http://commons.apache.org/proper/commons-imaging/apidocs/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.html)

IPTC - JpegIptcRewriter (http://commons.apache.org/proper/commons-imaging/apidocs/org/apache/commons/imaging/formats/jpeg/iptc/JpegIptcRewriter.html)

XMP - JpegXmpRewriter (http://commons.apache.org/proper/commons-imaging/apidocs/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpRewriter.html)

【讨论】:

  • 顺便问一下,公地成像有什么已知的发布日期吗?
  • 是的,2015 年 1 月 12 日;)
【解决方案2】:

看看IIM4J。使用IIMWriter 将 IPTC IIM 标签写入 (jpeg) 图像。

【讨论】:

  • 欢迎来到 SO,感谢您回答一个 2 岁的问题! :-)
【解决方案3】:

Apache Commons Imaging (formerly sanselan) 增加了对在 svn 存储库代码中编写 IPTC 元数据的支持,以用于下一个版本。我已经在从 svn repo 签出的最新中继代码中验证了这一点。代码看起来很稳定,所以我希望发布不会太远。对于我的项目,这已经足够好了。

【讨论】:

【解决方案4】:

我过去看过自己,但没有找到。我建议查看一个开源项目,例如 http://sourceforge.net/projects/image-tagger/,看看他们是如何做到的。

【讨论】:

  • 据我了解,Image-tagger 使用的是 ExifTool,它是用 Perl 编写的,需要安装 Perl,对吧?如果是,那么它不适合我的情况,因为我的应用程序应该只依赖已安装的 JRE。
【解决方案5】:

对于读取元数据,我认为您应该看看“metadata-extractor”——一个开发用于从图像文件读取元数据的 Java 库的开源项目(Apache 2.0 许可证)。

目前,该项目可以访问以下图片元数据:

  • Exif
  • IPTC
  • XMP
  • JFIF / JFXX
  • ICC 配置文件
  • Photoshop 字段

metadata-extractor”托管在google code

这是 2.4.0 版本的一个简单的代码示例:

public void example() throws Exception {
    File jpegFile = new File("yourJpgFile.jpg");
    Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);

    Iterator directory = metadata.getDirectoryIterator();
    while (directory.hasNext()) {
        Object tag = directory.next();
        if (tag instanceof ExifDirectory) {
            Iterator tags = ((ExifDirectory) tag).getTagIterator();
            while (tags.hasNext()) {
                System.out.println("EXIF: "+tags.next().toString());
            }
        } else if (tag instanceof IptcDirectory) {
            Iterator tags = ((IptcDirectory) tag).getTagIterator();
            while (tags.hasNext()) {
                System.out.println("IPTC: "+tags.next().toString());
            }
        } else if (tag instanceof JpegDirectory) {
            Iterator tags = ((JpegDirectory) tag).getTagIterator();
            while (tags.hasNext()) {
                System.out.println("JPEG: "+tags.next().toString());
            }
        } else {
            System.err.println(tag.getClass());
        }           
    }
}

【讨论】:

  • 正如我所说,我需要一个库来读取和写入元数据。 “元数据提取器”只支持读取。
【解决方案6】:

另一个有详细文档的库:https://docs.groupdocs.com/display/metadatajava,符合 IIMV4.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多