Код: Выделить всё
diff --git a/swig/python/scripts/gdal2tiles.py b/swig/python/scripts/gdal2tiles.py
index 9017e6e..49f0bbd 100755
--- a/swig/python/scripts/gdal2tiles.py
+++ b/swig/python/scripts/gdal2tiles.py
@@ -512,6 +512,8 @@ class GDAL2Tiles(object):
self.tilesize = 256
self.tiledriver = 'PNG'
self.tileext = 'png'
+ self.has_alpha = True
+ self.drv_options = []
# Should we read bigger window of the input raster and scale it down?
# Note: Modified leter by open_input()
@@ -544,6 +546,16 @@ class GDAL2Tiles(object):
except:
self.error("This version of GDAL is not supported. Please upgrade to 1.6+.")
#,"You can try run crippled version of gdal2tiles with parameters: -v -r 'near'")
+
+ self.tileext = self.options.format
+
+ if self.tileext in ('jpg', 'jpeg'):
+ self.tiledriver = 'JPEG'
+ if self.options.quality:
+ self.drv_options.append("QUALITY=%s" % (self.options.quality))
+ else:
+ self.tiledriver = self.tileext.upper()
+ self.has_alpha = self.tiledriver != 'JPEG'
# Is output directory the last argument?
@@ -655,6 +667,10 @@ gdal_vrtmerge.py -o merged.vrt %s""" % " ".join(self.args))
help="Resume mode. Generate only missing files.")
p.add_option('-a', '--srcnodata', dest="srcnodata", metavar="NODATA",
help="NODATA transparency value to assign to the input data")
+ p.add_option("-f", "--format", dest='format', default='png', choices=['png', 'jpeg', 'jpg'],
+ help="Image format")
+ p.add_option("-q", "--quality", dest='quality',
+ help="Values must be in the range 10-100 (default the quality flag is set to 75)")
p.add_option("-v", "--verbose",
action="store_true", dest="verbose",
help="Print status messages to stdout")
@@ -1164,7 +1180,9 @@ gdal2tiles temp.vrt""" % self.input )
#tmaxy = tminy
ds = self.out_ds
- tilebands = self.dataBandsCount + 1
+ tilebands = self.dataBandsCount
+ if self.has_alpha:
+ tilebands += 1
querysize = self.querysize
if self.options.verbose:
@@ -1262,7 +1280,8 @@ gdal2tiles temp.vrt""" % self.input )
if self.tilesize == querysize:
# Use the ReadRaster result directly in tiles ('nearest neighbour' query)
dstile.WriteRaster(wx, wy, wxsize, wysize, data, band_list=list(range(1,self.dataBandsCount+1)))
- dstile.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
+ if self.has_alpha:
+ dstile.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
# Note: For source drivers based on WaveLet compression (JPEG2000, ECW, MrSID)
# the ReadRaster function returns high-quality raster (not ugly nearest neighbour)
@@ -1274,7 +1293,8 @@ gdal2tiles temp.vrt""" % self.input )
#for i in range(1, tilebands+1):
# dsquery.GetRasterBand(1).Fill(tilenodata)
dsquery.WriteRaster(wx, wy, wxsize, wysize, data, band_list=list(range(1,self.dataBandsCount+1)))
- dsquery.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
+ if self.has_alpha:
+ dsquery.WriteRaster(wx, wy, wxsize, wysize, alpha, band_list=[tilebands])
self.scale_query_to_tile(dsquery, dstile, tilefilename)
del dsquery
@@ -1283,7 +1303,7 @@ gdal2tiles temp.vrt""" % self.input )
if self.options.resampling != 'antialias':
# Write a copy of tile to png/jpg
- self.out_drv.CreateCopy(tilefilename, dstile, strict=0)
+ self.out_drv.CreateCopy(tilefilename, dstile, strict=0, options=self.drv_options)
del dstile
@@ -1304,7 +1324,9 @@ gdal2tiles temp.vrt""" % self.input )
print("Generating Overview Tiles:")
- tilebands = self.dataBandsCount + 1
+ tilebands = self.dataBandsCount
+ if self.has_alpha:
+ tilebands += 1
# Usage of existing tiles: from 4 underlying tiles generate one as overview.
@@ -1378,7 +1400,7 @@ gdal2tiles temp.vrt""" % self.input )
# Write a copy of tile to png/jpg
if self.options.resampling != 'antialias':
# Write a copy of tile to png/jpg
- self.out_drv.CreateCopy(tilefilename, dstile, strict=0)
+ self.out_drv.CreateCopy(tilefilename, dstile, strict=0, options=self.drv_options)
if self.options.verbose:
print("\tbuild from zoom", tz+1," tiles:", (2*tx, 2*ty), (2*tx+1, 2*ty),(2*tx, 2*ty+1), (2*tx+1, 2*ty+1))