使用libtiff的TIFFReadRawTile来获取没有解压缩/压缩的jpeg磁贴

时间:2012-10-18 07:14:04

标签: c++ libjpeg libtiff

我有一个金字塔形平铺的tiff文件,我想提取瓷砖而不解码并重新编码jpeg,我已经看到使用TIFFReadRawTile()函数你可以提取原始瓷砖而无需解码,我该怎么写提取的缓冲区到可读的jpeg文件?

2 个答案:

答案 0 :(得分:0)

你所做的任务并不是一件轻而易举的事。您可能想要仔细查看tiff2pdf实用程序的源代码。该实用程序可以满足您的需求,您可以从中提取相关部分。

问题是,该实用程序会执行许多其他必须丢弃的操作。此外,该实用程序无法成功处理任何JPEG-in-TIFF。基本上,因为那里有足够的半破TIFF。

答案 1 :(得分:0)

我发现实际上没有办法获得编码的磁贴而不直接搞乱tiff的huffmann表,这非常棘手。

我找到的唯一方法是阅读已解码的磁贴,然后用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在一些标题之后输出图像。