how to convert geotiff to jpg in python or java?

送分小仙女□ 提交于 2019-12-08 06:24:14

问题


i have a geotiff images that have 3bands.

band1,2 is a actual image values and band3 is a instance angle value.

band1,2 is float32 data type

under code is that i try before.

but it doesn't work.

i think band data's range is too large, so it doesn't

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


ds = gdal.Open('image path', gdal.GA_ReadOnly)
rb = ds.GetRasterBand(1)
test = rb.ReadAsArray()
rb2 = ds.GetRasterBand(2)
test2 = rb2.ReadAsArray()
rb3 = ds.GetRasterBand(3)
test3 = rb3.ReadAsArray()
slice56 = test2
formatted = (slice56 * 255 / np.max(slice56)).astype('uint8')
img = Image.fromarray(formatted)
img.save('save image path')

how can i solve this problem??


回答1:


You can use gdal.Translate for this.

You can read the documentation here

from osgeo import gdal

options_list = [
    '-ot Byte',
    '-of JPEG',
    '-b 1,
    '-scale'
] 
options_string = " ".join(options_list)

gdal.Translate('save_image_path.jpg',
               'image_path.tif',
               options=options_string)

The above code simply create a jpg file with band 1 scaled into byte range. You could add more bands by adding, '-b 2' etc. Also notice that scale automatically wraps the entire range into byte range. If you like something else you could use '-scale min_val max_val' in order to specify the range you like, since often you have no need of either the lowest or highest values available.




回答2:


The above worked well for me except the JPEG resolution wasn't great. Swapping JPEG to PNG worked better.



来源:https://stackoverflow.com/questions/50207292/how-to-convert-geotiff-to-jpg-in-python-or-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!