2009-12-07 140 views

回答

0

如果找不到纯Java实现,那么可以考虑使用ImageMagick的Java绑定(JMagick)。这将允许大量不同的可能输出格式。

2

我最近花了一些时间编码icafe Java图像库的元数据操作部分,并使其能够插入和提取EXIF,IPTC,PHOTOSHOP,ICC_Profile,缩略图等元数据类型。一些函数比其他函数更好,但它们所有相对工作正常。有如下所示的所有元数据读取的通用接口:

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

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

    public class TestIPTC { 

     public static void main(String[] args) throws IOException { 
      Map<MetadataType, Metadata> metadataMap = Metadata.readMetadata(args[0]); 
      // Show IPTC specific information 
      IPTC iptc = (IPTC)metadataMap.get(MetadataType.IPTC); 
      if(iptc != null) { 
       // Retrieve a list of Keywords Dataset 
       List<IPTCDataSet> keywords = iptc.getDataSet("Keywords"); 
       //List<IPTCDataset> keywords = iptc.getDataSet(IPTCEnvelopeTag.KEY_WORDS.getName()); 
       for(IPTCDataSet keyword : keywords) 
        //System.out.println(keyword.getName()); 
        //System.out.println(keyword.getDataAsString()); 
        keyword.print(); 
      } 
     } 
    } 

如果我们从“图像”通过图像“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和Photoshop IRB的IPTC数据并删除重复项。