from osgeo import gdal import numpy as np import os import tempfile from PIL import Image def convert_gtiff_to_8bit(src): dst = src img = gdal.Open(src) driver = gdal.GetDriverByName('GTiff') output_image = driver.Create(dst, img.RasterXSize, img.RasterYSize, img.RasterCount, gdal.GDT_Byte, ['PHOTOMETRIC = RGB']) output_image.SetGeoTransform(img.GetGeoTransform()) output_image.SetProjection(img.GetProjection()) max_bands = img.RasterCount for i in range(max_bands): i = i+1 band = img.GetRasterBand(i) band_array = band.ReadAsArray() min, max = band.ComputeRasterMinMax(1) band_array = np.interp(band_array, (min,max), (0,255)).astype(np.uint8) out = output_image.GetRasterBand(i) out.WriteArray(band_array) out.FlushCache() return output_image del output_image