如何使用元数据生成tiff文件

时间:2012-03-13 21:31:25

标签: objective-c c ios imagemagick libtiff

我必须生成包含许多图像和元数据的tiff文件。 我发现可以将png或jpg转换为tiff here: 但是如何添加元数据呢?可以使用ImageMagic for iOS吗? 感谢

编辑:最后我在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? THX

2 个答案:

答案 0 :(得分:0)

我使用过LibTIFF - 但不是直接在iOS上使用。但是,它是一个普通的旧C库,所以应该没问题。我注意到Apple Image I / O框架应该支持图像元数据(但是我再也没有使用过它)。请参阅链接here - 但对于多页TIFF或定制标签似​​乎没有任何内容,只有标准化的相机信息标签......

但是,在普通的C中,添加自己的定制标签通常是通过修改核心库并将它们添加到主头文件中来执行的:tiff.h以及一些包装函数。

请参阅“Adding New Tags

部分

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

TIFFGetField(lp_tif,MYTAG, &lp_xml)

当然,您必须发布/维护修改后的libTIFF版本(新的“公共”标签必须通过Adobe完成此过程。)

您发布的示例适用于编写单个TIFF文件(即设置所有标记然后将缓冲区的内容写入文件)。对于多页TIFF - 它更进了一步。如果是图像文件目录(IFD),您需要了解这个概念。我建议进一步了解这个link以了解函数的用法:

TIFFWriteDirectory()
TIFFReadDirectory()

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

最后,您当然可以更进一步!如果您知道要创建的TIFF文件的固定结构 - 只需write the bytes而不使用LibTIFF。

答案 1 :(得分:0)

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

使用Phil Harvey的exiftool

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