LibTIFF:从TIFF图像中提取所有标签

Eri*_*ner 7 c c++ tiff libtiff

我目前正在开展一个项目,该项目要求我将TIFF图像拆分为包含所有标签的文件和包含所有图像数据的文件,并从这些文件重建TIFF图像.唯一的问题是,似乎LibTIFF没有提供从图像中​​获取所有标签的简单方法.我尝试使用TIFFGetTagListCount然后使用TIFFGetField来检索标记,但这只返回了一小部分标记.我已经开始滚动我自己的版本了,但我只想仔细检查并确保我不会忽略某些内容,因为这似乎是一个非常明显的功能,应该包含在库中.

use*_*515 5

以下是扫描所有标签时可以获得的关闭:

 #include "LibTIFF/tif_dir.h"
 ...

 TIFFDirectory *td = &tif->tif_dir;

 for (int fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) {
    const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi];

    // test if tag value is set
    // (lifted directly form LibTiff _TIFFWriteDirectory)

        if( fip->field_bit == FIELD_CUSTOM ) {
            int ci, is_set = FALSE;

            for( ci = 0; ci < td->td_customValueCount; ci++ )
                is_set |= (td->td_customValues[ci].info == fip);

            if( !is_set )
                continue;
        } else if(!TIFFFieldSet(tif, fip->field_bit))
            continue;

        // else: process the fip->field_tag


    }
Run Code Online (Sandbox Code Playgroud)

请注意,您必须考虑到某些标记将出现两次(LONG和SHORT版本),但其中只有一个具有值.可以在包含的标头(TIFFDirectory结构)中查找要使用的正确类型.

还有关于如何阅读标签的其他信息,但这至少会让你遍历所有标签(标准标签).如果卡住,请参阅tif_dirinfo.c以获取指示.


caf*_*caf 1

libtiff 文档中的addingtags.html包含有关处理非标准标签的信息(默认情况下它们被忽略)。这可能是问题所在吗?