我正在使用Apache Commons,但这对我来说是不够的,因为它是如此古老的技术。所以,我找到了iCafe,它似乎更好,但我有下面的错误。知道我做错了什么吗?
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.CATEGORY, "ICAFE"));
iptcs.add(new IPTCDataSet(IPTCApplicationTag.KEY_WORDS, "Welcome 'icafe' user!"));
return iptcs;
}
private static IPTC createIPTC() {
IPTC iptc = new IPTC();
iptc.addDataSets(createIPTCDataSet());
return iptc;
}
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");
List<Metadata> metaList = new ArrayList<Metadata>();
//metaList.add(populateExif(TiffExif.class));
metaList.add(createIPTC());
metaList.add(new Comments(Arrays.asList("Comment1", "Comment2")));
Metadata.insertMetadata(metaList, fin, fout);
}
}
还有我的例外
运行:线程“main”java中出现异常。lang.NoClassDefFoundError:org/slf4j/LoggerFactory位于com。icafe4j。形象元。元数据。(未知来源)在vectorcleaner。元数据1。vectorcleaner上的PopulateXif(Metadata1.java:41)。元数据1。main(Metadata1.java:127)由:java引起。lang.ClassNotFoundException:org。slf4j。爪哇的伐木工厂。网URLClassLoader。java上的findClass(URLClassLoader.java:381)。lang.ClassLoader。sun上的loadClass(ClassLoader.java:424)。杂项。Launcher$AppClassLoader。java上的loadClass(Launcher.java:349)。lang.ClassLoader。loadClass(ClassLoader.java:357)。。。3更多C:\Users\rajab\AppData\Local\NetBeans\Cache\8.2\executor snippets\run。xml:53:Java返回:1生成失败(总时间:0秒)
不知道你到底想要什么,但ICAFE可以用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;
}
}
上面的示例使用元数据。插入而不是元数据。插入元数据,因为我们还需要一个布尔参数。如果设置为true,它将保留现有的IPTC数据,并且只更新我们想要的数据。一些IPTC条目允许多个值。在这种情况下,我们只添加新的。对于其他独特的条目,它们将被新条目替换。
看起来你想添加关键词和标题。在你的问题中,你已经展示了插入关键词的代码,为了插入标题,使用OBJECT_NAME可以在上面的例子中找到。
注意:你也可以添加多个关键词。有些软件只能处理一条关键字记录。在这种情况下,可以将所有关键字放在一个记录中,用分号分隔,而不是插入多个条目。
我理解读-获取(在它之后不进行后续读/写操作的重新排序)和写-释放(在它之前不进行读/写操作的重新排序)。我的q是:- 在读获取的情况下,它前面的写操作会被刷新吗 另外,在Java中,读获取和volatile读相同,写释放和volatile写相同吗? 为什么这很重要,让我们以写发布为例... 在这一点上,x是2还是1?这里,考虑准备好成为挥发性的。我知道挥发性之前的所有商店都将首先可见...然后只
连接数据源后,Tableau会捕获源的元数据详细信息,例如列和列的数据类型。这用于创建视图中使用的度量,维度和计算字段。您可以浏览元数据并更改其属性以满足某些特定要求。 1. 检查元数据 连接数据源后,所有可能的表和列都将显示在数据源中。示例:用于检查元数据的源‘Sample Coffee Chain’。 单击“Data”菜单,然后选择与数据源连接。浏览名称为“Sample Coffee chai
我试图使用VS Code,但我有一个问题,打开与其他编辑器编写的代码,VS Code不能阅读韩语Unicode?UTF-8?我们在代码中称其他语言为什么? 我用vim编辑器编写了代码,其中一些注释是用韩语编写的,任何其他编辑器都可以阅读韩语,但VS代码如下所示。 我怎样才能解决这个问题?
我正在使用以下代码: 我正在从SQL数据库中检索数据,但每当我尝试插入数据时,都会在运行时出错: Java语言sql。SQLException:[Microsoft][ODBC SQL Server驱动程序][SQL Server]关键字“check”附近的语法不正确。在太阳。jdbc。odbc。JdbcOdbc。在sun上创建SQLException(未知源)。jdbc。odbc。JdbcOdb
我正在尝试将数据写入我的Arduino Uno,并从中接收日期。 我在Windows 8.1上使用NetBeans,为了做到这一点,库“RXTXcomm.jar”。 我的代码是这样的,我的Arduino在COM3上,它在第25行和第80行抛出一个错误: 错误 java.lang.UnsatisfiedLinkError:java.library中没有rxtxSerial。加载gnu.io时抛出的路
问题内容: 我有一个数据结构,我希望能够在关闭程序之前写入文件,然后在下次应用程序启动时从文件中读取数据以重新填充该结构。 我的结构是。对象很简单;对于成员变量,它具有一个String和两个布尔类型的小型本机数组。这是一个真正简单的应用程序,我希望一次不会超过10-15 对。 我一直在尝试(不成功)对象输入/输出流。我需要使对象类可序列化吗? 您能给我一些最好的建议吗?我只需要向正确的方向推进即可