1

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

1 回答 1

1

不幸的是,看起来 LibTiff.Net 只能读取 EXIF 标签而不能写入它们(原始 libtiff 也不能写入 EXIF 标签)。

libtiff 邮件列表中有一个关于为什么会这样的讨论。以下是讨论中的一些引述:

// 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,你应该先阅读一个EXIF目录。该库将在读取 EXIF 目录之前将 EXIF 标签添加到其已知标签列表中,并且以后不会发出有关未知标签的错误。

但是该库仍然无法将 EXIF 标记写入文件。

编辑:

如果您只想在文件中存储一些信息而不要求将其存储在EXIF_USERCOMMENT标签中,则可以选择一些选项。

您可以IMAGEDESCRIPTION为您的任务使用标签。下面是使用此标签的示例代码。请注意,代码对Open方法使用不同的参数,并且还使用RewriteDirectoryWriteDirectory.

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();
}
于 2014-04-23T17:51:15.570 回答