使用gdal_translate将16位TIFF转JPEG时如何保留16位深度?
问题解答
首先明确:JPEG格式本身不支持16位位深度,这是格式标准的限制,不是GDAL的问题。所以不管怎么调整参数,转成JPEG都没法保留16位信息,和你输入的TIFF位深度无关——哪怕你用更高位的TIFF,转JPEG照样会降到8位。
再看你当前的参数,这里还有两个主动触发降位的设置:
-ot Byte:直接指定输出数据类型为8位字节(Byte),强制把16位数据转成8位scale = "0-65535":这个参数会把原始16位的0-65535范围缩放到目标类型的取值范围(因为搭配了-ot Byte,所以是0-255),进一步完成降位转换
如果需要保留16位数据,你得换用支持16位的图像格式,推荐这几种:
- PNG:支持16位灰度图像,GDAL直接兼容
- TIFF:继续沿用TIFF格式,完全保留原始位深度
- JPEG 2000(JP2):JPEG的升级版,支持16位压缩,GDAL也支持
举个转16位PNG的参数示例:
options_list = [ '-ot UInt16', # 指定输出为16位无符号整数 '-of PNG', # 输出格式改为PNG '-b 1', '-co ZLEVEL=9' # PNG压缩级别,数值越高文件越小、质量损失越低 ]
如果非要用JPEG类的压缩格式,就转JP2,参数示例:
options_list = [ '-ot UInt16', '-of JP2OpenJPEG', # 指定JP2格式 '-b 1', '-co QUALITY=100' ]
内容的提问来源于stack exchange,提问作者Exavier
相关产品推荐
相关产品推荐

