我正在使用的系统具有使用com.drew.metadata
包从JPEG文件中提取元数据的功能。 http://www.drewnoakes.com/code/exif/然而,这仅限于JPEG文件,现在一位客户询问了从TIF提取IPTC以及可能的其他图像格式。使用Java从tif文件中提取IPTC/EXIF数据
有谁知道类似API的Drew Noakes one,可以从TIF中提取IPTC吗?
理想情况下,这将是一个纯粹的Java方法,如com.drew.metadata
之一。
我正在使用的系统具有使用com.drew.metadata
包从JPEG文件中提取元数据的功能。 http://www.drewnoakes.com/code/exif/然而,这仅限于JPEG文件,现在一位客户询问了从TIF提取IPTC以及可能的其他图像格式。使用Java从tif文件中提取IPTC/EXIF数据
有谁知道类似API的Drew Noakes one,可以从TIF中提取IPTC吗?
理想情况下,这将是一个纯粹的Java方法,如com.drew.metadata
之一。
这是一个老问题。现在我的metadata-extractor
库支持TIFF文件,以及JPEG,WebP,PSD,PNG,GIF,BMP,ICO,PCX和许多相机原始格式。
该项目最近才在GitHub上:
https://github.com/drewnoakes/metadata-extractor
,并可通过Maven的:
这里使用imageio
LIB访问IPTC这里
http://www.barregren.se/blog/how-read-exif-and-iptc-java-image-i-o-api
不幸的是有一个很好的例子,你仍然必须处理一些工作你自己的。
如果找不到纯Java实现,那么可以考虑使用ImageMagick的Java绑定(JMagick)。这将允许大量不同的可能输出格式。
我最近花了一些时间编码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数据并删除重复项。