Skip to content

Commit 82df4de

Browse files
Trashmonkm-kuhn
Trashmonk
authored andcommittedDec 21, 2017
Update Rasterize.py
1 parent 4fbea38 commit 82df4de

File tree

1 file changed

+41
-16
lines changed

1 file changed

+41
-16
lines changed
 

‎python/plugins/processing/algs/qgis/Rasterize.py

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
copyright : (C) 2016 by OPENGIS.ch
99
email : matthias@opengis.ch
1010
***************************************************************************/
11-
1211
/***************************************************************************
1312
* *
1413
* This program is free software; you can redistribute it and/or modify *
@@ -32,6 +31,7 @@
3231
QgsProcessingParameterExtent,
3332
QgsProcessingParameterString,
3433
QgsProcessingParameterNumber,
34+
QgsProcessingParameterBoolean,
3535
QgsProcessingParameterMapLayer,
3636
QgsProcessingParameterRasterDestination,
3737
QgsRasterFileWriter
@@ -75,6 +75,7 @@ class RasterizeAlgorithm(QgisAlgorithm):
7575
EXTENT = 'EXTENT'
7676
TILE_SIZE = 'TILE_SIZE'
7777
MAP_UNITS_PER_PIXEL = 'MAP_UNITS_PER_PIXEL'
78+
MAKE_BACKGROUND_TRANSPARENT = 'MAKE_BACKGROUND_TRANSPARENT'
7879

7980
def __init__(self):
8081
super().__init__()
@@ -104,6 +105,12 @@ def initAlgorithm(self, config=None):
104105
type=QgsProcessingParameterNumber.Double
105106
))
106107

108+
self.addParameter(
109+
QgsProcessingParameterBoolean(
110+
self.MAKE_BACKGROUND_TRANSPARENT,
111+
self.tr('Make background transparent'),
112+
defaultValue=False))
113+
107114
map_theme_param = QgsProcessingParameterString(
108115
self.MAP_THEME,
109116
description=self.tr(
@@ -129,6 +136,7 @@ def initAlgorithm(self, config=None):
129136
self.tr(
130137
'Output layer')))
131138

139+
132140
def name(self):
133141
# Unique (non-user visible) name of algorithm
134142
return 'rasterize'
@@ -172,6 +180,11 @@ def processAlgorithm(self, parameters, context, feedback):
172180
self.TILE_SIZE,
173181
context)
174182

183+
make_trans = self.parameterAsBool(
184+
parameters,
185+
self.MAKE_BACKGROUND_TRANSPARENT,
186+
context)
187+
175188
mupp = self.parameterAsDouble(
176189
parameters,
177190
self.MAP_UNITS_PER_PIXEL,
@@ -183,9 +196,9 @@ def processAlgorithm(self, parameters, context, feedback):
183196
context)
184197

185198
tile_set = TileSet(map_theme, layer, extent, tile_size, mupp,
186-
output_layer,
199+
output_layer, make_trans,
187200
qgis.utils.iface.mapCanvas().mapSettings())
188-
tile_set.render(feedback)
201+
tile_set.render(feedback, make_trans)
189202

190203
return {self.OUTPUT: output_layer}
191204

@@ -197,9 +210,8 @@ class TileSet():
197210
"""
198211

199212
def __init__(self, map_theme, layer, extent, tile_size, mupp, output,
200-
map_settings):
213+
make_trans, map_settings):
201214
"""
202-
203215
:param map_theme:
204216
:param extent:
205217
:param layer:
@@ -228,22 +240,32 @@ def __init__(self, map_theme, layer, extent, tile_size, mupp, output,
228240
xsize = self.x_tile_count * tile_size
229241
ysize = self.y_tile_count * tile_size
230242

231-
self.dataset = driver.Create(output, xsize, ysize, 4) # 4 bands
243+
if make_trans:
244+
no_bands = 4
245+
else:
246+
no_bands = 3
247+
248+
self.dataset = driver.Create(output, xsize, ysize, no_bands)
232249
self.dataset.SetProjection(str(crs.toWkt()))
233250
self.dataset.SetGeoTransform(
234251
[extent.xMinimum(), mupp, 0, extent.yMaximum(), 0, -mupp])
235-
252+
236253
self.image = QImage(QSize(tile_size, tile_size), QImage.Format_ARGB32)
237254

238255
self.settings = QgsMapSettings()
239256
self.settings.setOutputDpi(self.image.logicalDpiX())
240257
self.settings.setOutputImageFormat(QImage.Format_ARGB32)
241258
self.settings.setDestinationCrs(crs)
242259
self.settings.setOutputSize(self.image.size())
243-
self.settings.setBackgroundColor(QColor(255,255,255,0))
244260
self.settings.setFlag(QgsMapSettings.Antialiasing, True)
245261
self.settings.setFlag(QgsMapSettings.RenderMapTile, True)
262+
self.settings.setFlag(QgsMapSettings.UseAdvancedEffects, True)
246263

264+
if make_trans:
265+
self.settings.setBackgroundColor(QColor(255, 255, 255, 0))
266+
else:
267+
self.settings.setBackgroundColor(QColor(255, 255, 255))
268+
247269
if QgsProject.instance().mapThemeCollection().hasMapTheme(map_theme):
248270
self.settings.setLayers(
249271
QgsProject.instance().mapThemeCollection(
@@ -260,28 +282,31 @@ def __init__(self, map_theme, layer, extent, tile_size, mupp, output,
260282
else:
261283
self.settings.setLayers(map_settings.layers())
262284

263-
def render(self, feedback):
285+
def render(self, feedback, make_trans):
264286
for x in range(self.x_tile_count):
265287
for y in range(self.y_tile_count):
266288
if feedback.isCanceled():
267289
return
268290
cur_tile = x * self.y_tile_count + y
269291
num_tiles = self.x_tile_count * self.y_tile_count
270-
self.renderTile(x, y, feedback)
292+
self.renderTile(x, y, feedback, make_trans)
271293

272294
feedback.setProgress(int((cur_tile / num_tiles) * 100))
273295

274-
def renderTile(self, x, y, feedback):
296+
def renderTile(self, x, y, feedback, make_trans):
275297
"""
276298
Render one tile
277-
278299
:param x: The x index of the current tile
279300
:param y: The y index of the current tile
280301
"""
281302

282-
background_colour = QColor(255,255,255,0)
283-
self.image.fill(background_colour.rgba())
284-
303+
if make_trans:
304+
background_color = QColor(255, 255, 255, 0)
305+
self.image.fill(background_color.rgba())
306+
else:
307+
background_color = QColor(255, 255, 255)
308+
self.image.fill(background_color.rgb())
309+
285310
painter = QPainter(self.image)
286311

287312
self.settings.setExtent(QgsRectangle(
@@ -293,7 +318,7 @@ def renderTile(self, x, y, feedback):
293318
job = QgsMapRendererCustomPainterJob(self.settings, painter)
294319
job.renderSynchronously()
295320
painter.end()
296-
321+
297322
# Needs not to be deleted or Windows will kill it too early...
298323
tmpfile = tempfile.NamedTemporaryFile(suffix='.png', delete=False)
299324
try:

0 commit comments

Comments
 (0)
Please sign in to comment.