LibTiff.net无法更新EXIF_USERCOMMENT字段

时间:2014-04-21 19:04:04

标签: .net exif libtiff.net

我想简单地更新我正在创建的 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();
}

1 个答案:

答案 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();
}