python - 如何使用 GDAL 将数据保存到 PNG
问题描述
我正在尝试将数据保存到 PNG。文件已创建(并且尺寸正确,但未将数据写入其中。
最小示例代码:
from osgeo import gdal
import numpy as np
# data:
filename = '/tmp/test.png'
nx = 512
ny = 512
n_bands = 3
datatype = gdal.GDT_Byte
# create destination:
dst_driver_tmp = gdal.GetDriverByName('MEM')
dst_tmp = dst_driver_tmp.Create('', xsize=nx, ysize=ny, bands=n_bands, eType=datatype)
dst_driver = gdal.GetDriverByName('PNG')
dst_ds = dst_driver.CreateCopy(filename, dst_tmp, strict=0)
if not dst_ds:
raise Exception("CreateCopy failed")
# write data:
for i in range(n_bands):
data = np.array([[i * 0.5]])
band = dst_ds.GetRasterBand(i + 1).WriteArray(data)
dst_ds.FlushCache()
dst_ds = None
运行此代码会产生错误:
ERROR 6: /tmp/test.png, band 1: WriteBlock() not supported for this dataset.
ERROR 6: /tmp/test.png, band 2: WriteBlock() not supported for this dataset.
ERROR 6: /tmp/test.png, band 3: WriteBlock() not supported for this dataset.
该文件已创建并且是有效的 PNG 文件,但图像是黑色的。
我尝试过改变eType
,使用不同的值、尺寸、波段数......没有区别。如果重要的话:
$ gdalinfo --version
GDAL 2.2.2, released 2017/09/15
$ gdalinfo --formats | grep PNG
PNG -raster- (rwv): Portable Network Graphics
知道如何使用 GDAL 将值写入 PNG 吗?
解决方案
原来我误解了角色的作用CreateCopy
。需要将数据写入dst_tmp
,然后CreateCopy
在最后简单地调用以在一个步骤中创建 PNG 文件。希望它可以帮助某人。
推荐阅读
- drop-down-menu - 有没有办法在下拉菜单中修改字体?
- opengl - OpenGL:单个三角形平面的正面和背面是否有不同的光效?
- google-cloud-functions - 从 CLI 触发 Firebase 模拟器中的 PubSub 事件
- python - 从 django.utils.encoding 导入 python_2_unicode_compatible ImportError: cannot import name 'python_2_unicode_compatible'
- reactjs - Lodash 延迟函数不允许我看到被调用函数内部的状态
- javascript - 优化在 NodeJs 中执行链式 API 调用的时间
- c - 如何在 rot13 c 程序中修复 f 字母等错误
- scala - 使用 spark-hbase 时,我得到了 ClassNotFoundException:org.apache.hadoop.hbase.spark.SparkSQLPushDownFilter
- macos - 写入 /Users/yourname/.zshrc 时出错:权限被拒绝
- wordpress - WordPress 在点击时将 BuddyPress 自定义通知标记为已读