用于读取和写入IPTC元数据到JPEG和TIFF的Java库

时间:2010-10-03 21:26:43

标签: java jpeg tiff iptc


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

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

Apache Commons Imaging (formerly sanselan)增加了对svn repo代码中为其下一版本编写IPTC元数据的支持。我已经验证了从svn repo中检出的最新主干代码中的情况。代码似乎很稳定,所以我希望发布的版本不会太远。对于我的项目,这已经足够了。

答案 2 :(得分:4)

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

可以使用Apache Commons Imaging(以前的Sanselan)或元数据提取器(通过绘制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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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

  • 的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());
        }           
    }
}

答案 5 :(得分:0)

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