我正在尝试使用Libtiff提取SVS文件的第一页。 SVS文件对此图像使用JPEG2000压缩。
我的计划是:
下面是我试图从SVS中提取原始图块的内容。我从152MB的SVS文件中只有一个43KB的输出文件(无法提取原始图块)。
我希望有人能让我知道如何从SVS文件中提取图块。
let mysql = require('mysql');
let db = require('../configs/db');
let pool = mysql.createPool(db);
connPool (sql, val, cb) { //function name
pool.getConnection((err, conn) => {
if(err){
console.log('Connection Error:' + err);
}else{
console.log('allConnections:' + pool._allConnections.length);
let q = conn.query(sql, val, (err, rows,fields) => {
if (err) {
console.log('Query:' + sql + ' error:' + err);
}
cb(err, rows, fields);
conn.release();
});
}
});
},
...
let func = require('../sql/func');
let arr = [['Tom', 1], ['Jerry', 2], ['Jessica', 3]];
sql = 'update tbl set col1=?, col3=NOW() where col1=?';
func.connPool(sql, arr , (err,rows,fields) => {
if(err==null){
res.json({code: 200, msg: 'success'});
} else {
res.json({code: 400, msg: 'failed'+err});
}
});
答案 0 :(得分:2)
您正在编写每个8字节的图块。 sizeof(buf)
是指针buf
的字节大小。您想使用由TIFFReadRawTile
返回的实际读取的字节数:
tsize_t size = TIFFReadRawTile(tiff_in, tile, buf, (tsize_t)-1);
TIFFWriteRawTile(tiff_out, tile, buf, size);
请注意,这里是将JPEG2000压缩的数据复制到输出文件。您必须使用OpenJPEG解压缩此数据,然后写入未压缩切片大小的数据,在连续的平面配置中为tileWidth * tileLength * samplePerPixel * bitsPerSample / 8
,在单独的平面配置中为tileWidth * tileLength * bitsPerSample / 8
。
使用TIFFGetField
和TIFFSetField
时,需要检查返回值。如果发生错误,则返回0。您不能依赖未正确读取的值。
其他错误和警告通常会打印到stderr
。如果您在Windows下进行开发,则通常不会显示这些内容。我建议您研究TIFFSetErrorHandler
和TIFFSetWarningHandler
,在此处设置合适的消息显示功能将在开发过程中极大地帮助您。