1

我必须生成一个包含许多图像和元数据的 tiff 文件。我发现可以在 这里将 png 或 jpg 转换为 tiff :但是如何添加元数据?iOS 版 ImageMagic 可以吗?谢谢

编辑:最后我在iphone上安装了ImageMagick,但我没有找到如何用magickwand创建多页tiff ....也可以直接使用libtiff:我找到了如何在c代码中创建一个空的简单页面

char buffer[25 * 144] = { /* boring hex omitted */ };
    TIFF *image;
    char szFileName[512];


    strcpy(szFileName, getenv("HOME"));
    strcat(szFileName, "/Documents/");
    strcat(szFileName, "output.tif");
    // Open the TIFF file
    if((image = TIFFOpen(szFileName, "w")) == NULL)
    {
        printf("Could not open output.tif for writing\n");
    }
    
    // We need to set some values for basic tags before we can add any data
    TIFFSetField(image, TIFFTAG_IMAGEWIDTH, 25 * 8);
    TIFFSetField(image, TIFFTAG_IMAGELENGTH, 144);
    TIFFSetField(image, TIFFTAG_BITSPERSAMPLE, 1);
    TIFFSetField(image, TIFFTAG_SAMPLESPERPIXEL, 1);
    TIFFSetField(image, TIFFTAG_ROWSPERSTRIP, 144);
    
    TIFFSetField(image, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX4);
    TIFFSetField(image, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
    TIFFSetField(image, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB);
    TIFFSetField(image, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
    
    TIFFSetField(image, TIFFTAG_XRESOLUTION, 150.0);
    TIFFSetField(image, TIFFTAG_YRESOLUTION, 150.0);
    TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
    
    // Write the information to the file
    TIFFWriteEncodedStrip(image, 0, buffer, 25 * 144);
    
    // Close the file
    TIFFClose(image);

那么有没有关于如何在创建的 tiff 文件中插入图像数据的 c 教程?以及如何创建多页 tiff ?谢谢

4

2 回答 2

0

我使用过 LibTIFF - 但不是直接在 iOS 上使用。但是,它是一个普通的旧 C 库,所以应该没问题。我确实注意到 Apple Image I/O 框架应该支持图像元数据(但同样,我自己没有使用过这个)。请参阅此处的链接-但似乎没有多页 TIFF 或定制标签,只有标准化的相机信息标签...

然而,在纯 C 语言中,添加您自己的定制标签通常最简单的方法是修改核心库并将它们添加到主头文件:tiff.h 以及一些包装函数。

请参阅“添加新标签”部分

然后您可以像使用其他 TIFF 标签一样引用/使用它们,例如我为加载一些嵌入式 xml 数据所做的工作:

TIFFGetField(lp_tif,MYTAG, &lp_xml)

当然,然后您必须运送/维护您修改后的 libTIFF 版本(新的“公共”标签必须通过 Adob​​e 的流程)。

您发布的示例适用于编写单个 TIFF 文件(即设置所有标签,然后将缓冲区的内容写入文件)。对于多页 TIFF - 更进一步。您需要了解图像文件目录 (IFD) 的概念。我建议进一步查看此链接以了解这些功能的使用:

TIFFWriteDirectory()
TIFFReadDirectory()

注意:正确地,每个TIFF 文件应该有一个目录来将所有标签和图像数据关联在一起。

最后,您当然可以更进一步!如果您知道要创建的 TIFF 文件的固定结构 - 只需写入字节,甚至无需使用 LibTIFF。

于 2012-03-26T13:23:15.420 回答
0

如果您可以选择使用脚本添加元数据:

使用菲尔哈维的exiftool

exiftool是一个功能强大、文档齐全(和多平台)的命令行实用程序,用于从/向许多不同的文件格式(包括 TIFF)读取和写入元数据。

于 2012-04-27T16:15:18.193 回答