Как создать файл TIFF с метаданными - PullRequest
1 голос
/ 14 марта 2012

Мне нужно создать TIFF-файл со множеством изображений и метаданных. Я обнаружил, что можно преобразовать PNG или JPG в TIFF здесь : Но как добавить метаданные? это возможно с ImageMagic для iOS? спасибо

Редактировать: в конце концов я установил ImageMagick на iphone, но я не нашел, как создать многостраничный TIFF с помощью Magickwand .... Возможно также использовать 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? а как создать многостраничный тифф? ТНХ

Ответы [ 2 ]

0 голосов
/ 27 апреля 2012

В случае, если вы можете использовать скрипт для добавления метаданных:

Используйте Фила Харви exiftool!

exiftool - довольно мощная, хорошо документированная (и многоплатформенная) утилита командной строки для чтения и записи метаданных из / во множество различных форматов файлов, включая TIFF.

0 голосов
/ 26 марта 2012

Я использовал LibTIFF - но не на iOS напрямую. Но тогда это простая старая библиотека C, так что все должно быть в порядке. Я отмечаю, что платформа Apple Image I / O предположительно поддерживает метаданные изображения (но, опять же, я сам этим не пользовался). См. Ссылку здесь - но, похоже, ничего для многостраничных тегов TIFF или на заказ, только для стандартных тегов информации о камере ...

Однако в простом C добавление ваших собственных сделанных на заказ тегов обычно выполняется наиболее просто путем изменения основной библиотеки и добавления их в основной заголовочный файл: tiff.h вместе с несколькими функциями-обертками.

См. Раздел " Добавление новых тегов "

И затем вы можете ссылаться на них / использовать их так же, как и другие теги TIFF, например что я сделал для загрузки некоторых встроенных XML-данных:

TIFFGetField(lp_tif,MYTAG, &lp_xml)

Разумеется, вам нужно будет отправить / сохранить вашу модифицированную версию libTIFF (новые «публичные» теги должны пройти через процесс в Adobe).

Пример, который вы опубликовали, подходит для записи одного файла TIFF (т.е. установите все теги, а затем запишите содержимое буфера в файл). Для многостраничного TIFF - это еще один шаг вперед. Вы должны понимать концепцию, если каталог файлов изображений (IFD). Я бы посоветовал посмотреть на эту ссылку , чтобы понять, как использовать функции:

TIFFWriteDirectory()
TIFFReadDirectory()

Примечание: правильно, каждый файл TIFF должен иметь один каталог, чтобы связать все теги и данные изображения вместе.

Наконец, вы, конечно, можете пройти еще один уровень дальше! Если вам известна фиксированная структура файла TIFF, который вы хотите создать - просто запишите байты , даже не используя LibTIFF.

...