我想简单地更新我正在创建的 tif 图片上的EXIF_USERCOMMENT
字段。
对SetField
的调用失败。不确定我做错了什么。
这是我过于简单化的代码。
任何帮助都将不胜感激。
{
Tiff tiffdoc = Tiff.Open("C:\\temp\\~tempCapture.tif","rw");
bool bSetField = tiffdoc.SetField(TiffTag.EXIF_USERCOMMENT, "test comment field");
tiffdoc.WriteDirectory();
tiffdoc.Close();
}
答案 0 :(得分:0)
不幸的是,看起来LibTiff.Net只能读取EXIF标签并且无法写入它们(原始libtiff也无法写入EXIF标签)。
有一个discussion in the libtiff mailing list关于它为何如此。以下是讨论中的一些引用:
// FIXME -- we don't currently support writing of EXIF fields. TIFF
// in theory allows it, using a custom IFD directory, but at
// present, it appears that libtiff only supports reading custom
// IFD's, not writing them.
伦纳德罗森特霍尔:
I don't really think that libTIFF really wants to start down the
metadata "rabbit hole"...
鲍勃弗里森哈恩:
I do agree with Leonard Rosenthol that libtiff should not be in the
business of dealing with EXIF private IFD tags (even though it
somewhat does already).
至于Unknown tag EXIF_USERCOMMENT
,您应该read an EXIF directory first。在读取EXIF目录之前,库会将EXIF标记添加到其已知标记列表中,以后不会发出有关未知标记的错误。
但是库仍然无法将EXIF标签写入文件。
修改强>
如果您只想在文件中存储某些信息而不要求将其存储在EXIF_USERCOMMENT
标记中,您可以选择一些选项。
您可以使用IMAGEDESCRIPTION
标记完成任务。以下是使用此标记的示例代码。请注意,代码使用Open
方法的不同参数,并使用RewriteDirectory
代替WriteDirectory
。
string fileName = "C:\\temp\\~tempCapture.tif";
using (Tiff tiffdoc = Tiff.Open(fileName, "a"))
{
tiffdoc.SetDirectory(0);
bool bSetField = tiffdoc.SetField(TiffTag.IMAGEDESCRIPTION, "test comment field");
tiffdoc.RewriteDirectory();
}