Не уверен, что именно вы хотите, но вот что ICAFE может сделать с метаданными IPTC:
- Считать IPTC из изображения.
- Вставить IPTC в изображение или обновить IPTC существующего изображения.
- Удалить IPTC из изображения.
Для чтения IPTC, вот пример:
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, вот пример:
import java.io.IOException;
import java.util.List;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import com.icafe4j.image.meta.Metadata;
import com.icafe4j.image.meta.MetadataEntry;
import com.icafe4j.image.meta.MetadataType;
import com.icafe4j.image.meta.iptc.IPTCDataSet;
import com.icafe4j.image.meta.iptc.IPTCApplicationTag;
public class InsertIPTC {
public static void main(String[] args) throws IOException {
FileInputStream fin = new FileInputStream("C:/Users/rajab/Desktop/test/ibo.jpeg");
FileOutputStream fout = new FileOutputStream("C:/Users/rajab/Desktop/test/ibo/ibo.jpeg");
Metadata.insertIPTC(fin, fout, createIPTCDataSet(), true);
}
private static List<IPTCDataSet> createIPTCDataSet() {
List<IPTCDataSet> iptcs = new ArrayList<IPTCDataSet>();
iptcs.add(new IPTCDataSet(IPTCApplicationTag.COPYRIGHT_NOTICE, "Copyright 2014-2016, yuwen_66@yahoo.com"));
iptcs.add(new IPTCDataSet(IPTCApplicationTag.OBJECT_NAME, "ICAFE"));
iptcs.add(new IPTCDataSet(IPTCApplicationTag.KEY_WORDS, "Welcome 'icafe' user!"));
return iptcs;
}
}
В приведенном выше примере вместо Metadata.insertMetadata используется Metadata.insertIPTC, потому что нам нужен еще один логический параметр.Если установлено значение true, он сохранит существующие данные IPTC и обновит только те, которые нам нужны.Некоторые из записей IPTC допускают несколько значений.В этом случае мы только добавляем / добавляем новые.Для других уникальных записей они будут заменены новыми.
Похоже, вы хотите добавить ключевые слова и заголовок.В своем вопросе вы уже показали код для вставки ключевых слов, а для вставки заголовка используйте OBJECT_NAME, который можно найти в приведенном выше примере.
Примечание: вы также можете добавить несколько ключевых слов.Некоторые программы могут обрабатывать только одну запись ключевых слов.В этом случае вы можете поместить все ключевые слова в одну запись, разделенные точкой с запятой, вместо вставки нескольких записей.