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 に答える