【发布时间】:2015-08-25 00:31:37
【问题描述】:
我正在尝试使用 iim4j 库修改或添加新标签,但它的文档很差。我一直在互联网上搜索示例,到目前为止还没有找到任何东西。我只得到了图书馆提供的例子。有一个关于读取元数据的示例,我可以获得图像的标题、描述和标签(我关心的那些)。我知道库将这些信息作为 DataSet 和 DataSetInfo 进行管理,因此我尝试为我想要添加的信息创建这些对象的新实例,但到目前为止我没有任何结果。
这是读取 jpeg 文件的 IPTC 部分的代码:
public static void dump(File file) throws Exception {
System.out.println("IPTC segment for " + file);
IIMFile iimFile = new IIMFile();
IIMReader reader = new IIMReader(new JPEGIIMInputStream(new FileIIMInputStream(file)), new IIMDataSetInfoFactory());
iimFile.readFrom(reader, 20);
for (Iterator i = iimFile.getDataSets().iterator(); i.hasNext();) {
DataSet ds = (DataSet) i.next();
Object value = ds.getValue();
if (value instanceof byte[]) {
value = "<bytes " + ((byte[]) value).length + ">";
}
DataSetInfo info = ds.getInfo();
if (info instanceof DefaultDataSetInfo)
{
System.out.println("-----------");
System.out.println("Number : " + info.getDataSetNumber());
System.out.println("Name :" + info.getName());
Serializer serializador=info.getSerializer();
if(serializador instanceof StringSerializer)
System.out.println("Serializer :" + serializador.toString());
System.out.println("Repeat : " + info.isRepeatable());
System.out.println("----------");
}
System.out.println(info.toString() + " " + info.getName() + ": " + value);
}
reader.close();
}
我可以获得我需要的所有信息,而且我知道我必须使用那种对象来在另一个文件上添加新信息。所以我尝试了这个来添加一个新标签:
String tagToAdd="Tag to add";
int size= tagToAdd.length();
DefaultDataSetInfo valueTag=new DefaultDataSetInfo(537,"Keywords", new StringSerializer(size+ ""),true);
DefaultDataSet dataSet=new DefaultDataSet(valueTag, tagToAdd.getBytes());
iimFile.add(dataSet);
并尝试用这个写一个带有标签的新文件:
String tagToAdd="Tag to add";
int size= tagToAdd.length();
DefaultDataSetInfo valueTag=new DefaultDataSetInfo(537,"Keywords", new StringSerializer(size+ ""),true);
DefaultDataSet dataSet=new DefaultDataSet(valueTag, tagToAdd.getBytes());
IIMWriter escritor= new IIMWriter(new DefaultIIMOutputStream(file));
escritor.write(dataSet);
escritor.close();
未添加标签。我需要一些关于这个库及其使用的帮助。谢谢
【问题讨论】:
-
正如你所说,文档很差,这真的很遗憾,因为从我所看到的代码来看不是。事实上,在不得不与 commons-imaging 搏斗之后,iim4j 看起来很出色。另外,请参阅我的答案以获取解决问题的简单方法。
标签: java tags metadata jpeg keyword