繁体   English   中英

使用 python gdal 从字节数据中保存图像

[英]Save image from byte data with python gdal

我正在从 ArcGIS REST API 服务器检索带有元数据的 Sentinel-2 图像。 它以字节字符串的形式出现。 我目前首先使用 f.write() 将数据写入 tif 文件。 然后我用 imageio 打开它,然后用 gdal 将它保存为 geoTIFF。

我想将图像直接保存为带有 gdal 的 geoTIFF。 但是我还没有弄清楚如何直接从字节数据中将图像提取为numpy数组,或者如何使用gdal直接从字节数据中写入图像。 我使用 Python 3.8 和 Windows 10。

import requests
from imageio import imread
from osgeo import gdal

response = requests.get(im_url, auth=auth)  # call image url
im_binary = response.content  # the image in binary format
im_newpath = 'testimage.tif'
with open(im_newpath, 'wb') as f: 
     f.write(im_binary)

print(type(im_binary))

print(im_binary[0:50])

返回:

<class 'bytes'>

b'II*\x00\x08\x00\x00\x00\x15\x00\x00\x01\x03\x00\x01\x00\x00\x00X\x02\x00\x00\x01\x01\x03\x00\x01\x00\x00\x00\x90\x01\x00\x00\x02\x01\x03\x00\r\x00\x00\x00\n\x01\x00\x00\x03\x01\x03\x00'

到目前为止,我对数据进行解码的尝试都产生了不好的结果。

decoded = im_binary.decode('utf_16')

UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 364-365: illegal UTF-16 surrogate

忽略或替换错误会给出各种非数字字符。 有什么建议吗?

从答案中总结我的评论和见解:

这种方法似乎没有错。 由于图像由纯二进制数据组成,因此不使用 UTF 解码例程。

我不明白任何其他解码的必要性。 收到的内容看起来像精细的 TIFF 数据。

虽然写入临时文件只是为了能够将文件传递给另一个库似乎很笨拙,但这是一种强大而干净的继续方式。 可能通过使用StringIo实例可以避免物理文件,但是由于这需要将完整的图像数据保存在 memory 中,因此它可能不适用于大图像。 (我不确定,在这种情况下,要传递给 tom imread()的 URL 如何看起来像 - 似乎是使用文件的另一个参数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM