我正在该系统具有这样的特征,以从使用com.drew.metadata包JPEG文件中提取元数据。 http://www.drewnoakes.com/code/exif/ 然而,其不限于JPEG文件,现在客户已经被问及TIF提取IPTC,可能还有其他的图像格式。

没有人知道有关类似API来德鲁诺克斯一个,可以从提取TIF IPTC?

理想地,这将是象com.drew.metadata一个纯Java的方法。

有帮助吗?

解决方案

这是一个老问题。如今我metadata-extractor库支持TIFF文件,以及JPEG,WebP的,PSD,PNG,GIF,BMP,ICO,PCX,许多相机的RAW格式。

最近搬到GitHub的项目:

https://github.com/drewnoakes/metadata-extractor

和可经由Maven的:

http://search.maven.org/#search%7Cga%7C1% 7Cdrewnoakes

其他提示

我花了一些时间最近编码 iCafe咖啡厅的Java图像库的元数据操作的部分,使之能插入和提取元数据类型,如EXIF,IPTC,PHOTOSHOP,将ICC_Profile,缩略图等一些功能比别人好,但他们都比较正常工作。有以下所示的所有元数据读取通用的接口:

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Iterator;

import com.icafe4j.image.meta.Metadata;
import com.icafe4j.image.meta.MetadataEntry;
import com.icafe4j.image.meta.MetadataType;
import com.icafe4j.image.meta.iptc.IPTC;

public class ExtractIPTC {

    public static void main(String[] args) throws IOException {
        Map<MetadataType, Metadata> metadataMap = Metadata.readMetadata(args[0]);
        IPTC iptc = (IPTC)metadataMap.get(MetadataType.IPTC);

        if(iptc != null) {
            Iterator<MetadataEntry> iterator = iptc.iterator();

            while(iterator.hasNext()) {
                MetadataEntry item = iterator.next();
                printMetadata(item, "", "     ");
            }
        }   
    }
    private void printMetadata(MetadataEntry entry, String indent, String increment) {
        logger.info(indent + entry.getKey() (StringUtils.isNullOrEmpty(entry.getValue())? "" : ": " + entry.getValue()));
        if(entry.isMetadataEntryGroup()) {
             indent += increment;
             Collection<MetadataEntry> entries = entry.getMetadataEntries();
             for(MetadataEntry e : entries) {
                printMetadata(e, indent, increment);
             }          
        }
    }   
}

如果我们从“图像”通过图像“iptc.tif”项目作为参数的目录,我们将获得以下信息:

Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 6
Dataset value: Bayern
Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 11
Dataset value: Deckelstein
Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 7
Dataset value: Germany
Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 10
Dataset value: Nittendorf

在上面的代码工作JPEG和TIFF一样。它自动检测图像类型及委托给相应的代码做的工作。

请注意:有可能是包含IPTC数据TIFF文件不止一个地方。一个是RichTiffIPTC标签,另一种是埋Photoshop的标签内。目前,iCafe咖啡厅只保留一个IPTC数据。如果有IPTC数据和RichTiffIPTC标签在Photoshop标签存在,它会保持RichTiffIPTC数据。否则,无论标签存在,它将从标签保持IPTC数据。这是没有问题,从两个地方保存数据。当前实现使用地图映射元数据类型键,独特的元数据。因此,只有保持一个独特的元数据实例。

<强>更新 iCafe咖啡厅现在可以从两个RichTiffIPTC结合IPTC数据和Photoshop的IRB和删除重复。

<强> UPDATE2:基类中的iCafe咖啡厅所有元数据类型 - 元数据现在实现可迭代接口,使用户现在可以通过MetadataEntry的集合迭代。 MetadataEntry本身是使用复合图案,从而一MetadataEntry可以包含其他MetadataEntry的集合创建。每个MetadataEntry包含密钥和值对。这种设计允许在元数据条目的树结构的遍历。

有这里使用imageio LIB这里访问IPTC的是一个很好的例子

的http:// WWW .barregren.se /博客/如何读取-EXIF和 - IPTC-java的图像-IO-API

不幸的是,你仍然必须处理一些工作你自己的。

如果你不能找到一个纯Java实现,你可以考虑使用Java绑定的ImageMagick( JMagick )。这将允许对不同的可能的输出格式过多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top