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

标签 c++ c tiff libtiff

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

最佳答案

这是扫描所有标签可以获得的关闭数:

 #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


    }

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

还有其他关于如何阅读标签的问题,但这至少会让你遍历所有标签(标准标签)。如果您遇到困难,请参阅 tif_dirinfo.c 以获取指示。

关于c++ - LibTIFF:从 TIFF 图像中提取所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904843/

相关文章:

c++ - 'iter' 的名称查找更改为新的 ISO 'for' 范围

c++ - 在一组模板化对象上运行函数

C 两个结构导致段错误 11

编译器代码生成比较

c - C运算符的执行顺序

c++ - iOS,objective-c 代码中的 shared_ptr 生命周期?

c++ - 每个进程消耗的内存

java - TIFFPackBitsCompressor - NPE?

c++ - 是否可以通过每次仅在内存中保存一个图 block 来处理完整的图 block tiff 图像?

python - 关于使用 skimage 读取 tiff 文件