0

我有一个金字塔平铺的 tiff 文件,我想在不解码和重新编码 jpeg 的情况下提取图块,我已经看到使用 TIFFReadRawTile() 函数可以在不解码的情况下提取原始图块,我如何编写提取的缓冲区到可读的 jpeg 文件?

4

2 回答 2

0

你要完成的任务不是一件小事。您可能想仔细查看 tiff2pdf 实用程序的源代码。该实用程序可以满足您的需要,您可以从中提取相关部分。

问题是,该实用程序执行许多其他您将不得不丢弃的事情。此外,该实用程序无法成功处理任何 JPEG-in-TIFF。基本上,因为那里有足够多的半损坏 TIFF。

于 2012-10-18T13:58:39.593 回答
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 在一些标题之后输出图像。

于 2012-11-19T20:10:23.023 回答