Использование libtiff TIFFReadRawTile для получения плитки JPEG без декомпрессии / сжатия

у меня есть пирамидальный файл TIFF, и я хочу извлечь плитки без декодирования и перекодирования в формате JPEG, я видел, что с помощью функции TIFFReadRawTile () вы можете извлечь необработанную плитку без декодирования, как я могу записать извлеченный буфер в читаемый файл JPEG?

0

Решение

Задача, которую вы делаете, не является тривиальной. Возможно, вы захотите поближе взглянуть на исходный код утилиты tiff2pdf. Утилита делает то, что вам нужно, и вы можете извлечь из нее соответствующие части.

Проблема в том, что утилита делает много других вещей, от которых вам придется отказаться. Кроме того, утилита не может успешно обработать ни один файл JPEG-in-TIFF. В основном потому, что там достаточно полубитых TIFF.

0

Другие решения

Я обнаружил, что на самом деле нет способа получить закодированный тайл без непосредственного связывания с таблицами Хаффмана в tiff, что довольно сложно.

Единственный способ, который я нашел, — это прочитать декодированную плитку, а затем сделать магию с помощью vips, чтобы вывести ее непосредственно в jpeg.

tdata_t buf;
tsize_t len;

buf = _TIFFmalloc( TIFFTileSize( tif ) );
len = TIFFReadEncodedTile(tif, tile, buf, (tsize_t) -1);

VImage result ((void *) buf, 256, 256, 3, VImage::FMTUCHAR);

void *outBuffer;
unsigned long len;
vips_jpegsave_buffer(result, &outBuffer, &len, "Q", 90, NULL);

и использовать cout для вывода изображения после некоторых заголовков.

0

По вопросам рекламы [email protected]