无坐标信息的PNG格式图片转GEOTIF格式图片(WSG84)

背景:

最近在公司接触到了gis的项目需要将PNG图片转成tif图片,而且是geotif图片(带坐标系的tif),使用了arcmap去转遇到了各种各样的问题,最后找chatgpt解决了(算是勉强解决把总感觉还是有点模糊)。

代码是不断与chatgpt沟通之后,优化出来的;使用python3.1写的。

需要输入:

png图片位置

需要输出tif的位置

PNG图像的边缘坐标WSG84,此坐标系就是经纬度坐标系(左上角、右上角、右下角坐标)

废话不多说,上代码了。

"""
  __author__=chatgpt、shadow
"""

import numpy as np
from PIL import Image
from osgeo import gdal, osr


# 加载 PNG 图像并获取图像数据 TODO 普通PNG图片
png_image = Image.open("D:\\a_project\\python\\img\\xxxxxx.png")
image_data = np.array(png_image)
height, width, channels = image_data.shape

# 定义 GeoTIFF 文件的输出路径和文件名 TODO GEOTIFF图片(带坐标的tif图片)
output_geotiff = "D:\\a_project\\python\\img\\xxxxxx.tif"

# 创建 GeoTIFF 文件
driver = gdal.GetDriverByName("GTiff")
geotiff_dataset = driver.Create(output_geotiff, width, height, channels, gdal.GDT_Byte)

# 将 PNG 图像数据写入 GeoTIFF 文件
for band in range(channels):
    geotiff_band = geotiff_dataset.GetRasterBand(band + 1)
    geotiff_band.WriteArray(image_data[:, :, band])

# 定义 PNG 图像的边缘坐标(WSG84) TODO 依次 左上角、右上角、右下角坐标
top_left = (109.53041934967, 29.5403505145483)
top_right = (109.550847053528, 29.5403505145483)
bottom_right = (109.550847053528, 29.5316645315345)

# 定义 GeoTIFF 文件的空间参考(Spatial Reference)
spatial_reference = osr.SpatialReference()
spatial_reference.ImportFromEPSG(4326)  # WGS84 EPSG code

# 设置 GeoTIFF 文件的地理转换信息(GeoTransform)
geotransform = (
    top_left[0], (top_right[0] - top_left[0]) / width, 0,
    top_left[1], 0, (bottom_right[1] - top_left[1]) / height
)


geotiff_dataset.SetGeoTransform(geotransform)
geotiff_dataset.SetProjection(spatial_reference.ExportToWkt())

# 设置 GeoTIFF 文件的重采样方法为最近邻法
geotiff_dataset.SetMetadataItem('RESAMPLING', 'NEAREST_NEIGHBOR')

# 设置 GeoTIFF 文件的压缩方法为 DEFLATE
geotiff_dataset.SetMetadataItem('COMPRESS', 'DEFLATE')

# 保存并关闭 GeoTIFF 文件
geotiff_dataset.FlushCache()
geotiff_dataset = None

直接复制到编译器,修改需要的参数(TODO)就行了。

如果还能优化烦请大佬指出来哈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值