Colab环境下用Python GDAL将TIF转RGB PNG时输出文件无png扩展名问题
问题根源
输出文件名没有根据设置的输出格式替换后缀,直接沿用了源文件的.tif扩展名。
GDAL的gdal_translate工具只会严格按照传入的输出路径字符串写文件,不会因为-of参数指定了PNG格式,就自动把文件名后缀改成.png——哪怕你给的输出路径是img0.tif,只要指定了-of png,它也会把标准PNG编码的内容写到这个带.tif后缀的文件里,本质文件内容是PNG,只是文件名后缀不对而已。
从你打印的执行命令日志能直接看到,最终传给gdal_translate的输出路径是/content/drive/MyDrive/Spacenet_data/img0.tif,根本没有替换扩展名。
修复方案
- 最直观的修改:在循环拼接输出路径时,主动替换文件扩展名
把原来直接拼文件名的代码:
替换成如下逻辑:for file in files: resimPath = path+file dstPath = "/content/drive/MyDrive/Spacenet_data/" dstPath = dstPath+file _16bit_to_8Bit(resimPath,dstPath)for file in files: resimPath = os.path.join(path, file) # 拆分原文件名,剥离原本的.tif后缀 base_name = os.path.splitext(file)[0] # 拼接对应PNG格式的输出文件名 dstPath = os.path.join( "/content/drive/MyDrive/Spacenet_data/", f"{base_name}.png" ) _16bit_to_8Bit(resimPath, dstPath) - 更通用的修改:在
_16bit_to_8Bit函数内部自动匹配输出路径后缀,后续不管切换PNG、JPG还是其他输出格式,都不用重复调整调用代码
在函数构建gdal_translate命令的部分,新增路径自动修正逻辑:# 格式与文件后缀的映射关系 suffix_map = { "png": "png", "JPEG": "jpg", "GTiff": "tif" } output_base = os.path.splitext(outputRaster)[0] # 生成带正确后缀的最终输出路径 correct_output_path = f"{output_base}.{suffix_map.get(outputFormat, 'img')}" # 追加命令参数时使用修正后的路径 cmd.append(inputRaster) cmd.append(correct_output_path) - 清理代码中的残留语法错误:你当前代码里有一段复制粘贴带进来的乱码,实际运行时会触发语法错误,需要替换成正确逻辑:
原错误片段:
修正为:if bmin is None or bmax is None: [enter image description here][1](bmin, bmax) = band.ComputeRasterMinMax(1)if bmin is None or bmax is None: bmin, bmax = band.ComputeRasterMinMax(1)
内容的提问来源于stack exchange,提问作者Parimal Bhoyar
相关产品推荐
相关产品推荐

