In QGIS 3.22 I want to save an extract of an OpenStreetMap layer I included with https://tile.openstreetmap.org/{z}/{x}/{y}.png. There is only one layer. However, the extract of the layer is sharp in OSM and blurry in the exported image. I changed various parameters: layer porpoerties: tile resolution resolution of the exported image dpi zoom but the qualitiy of the png is always worse than the quality of the same OSM extract in QGIS. What am I doing wrong? Here is the code: def to3857Coords(lat,lon): from pyproj import Proj, transform P3857 = Proj(init='epsg:3857') P4326 = Proj(init='epsg:4326') x,y = transform(P4326, P3857, lon, lat) return x,y def saveImg(xsize, ysize, dotspermeter): img = QImage(QSize(xsize, ysize), QImage.Format_ARGB32_Premultiplied) img.setDotsPerMeterX(dotspermeter) img.setDotsPerMeterY(dotspermeter) # create map settings ms = QgsMapSettings() # create painter p = QPainter() p.begin(img) p.setRenderHint(QPainter.HighQualityAntialiasing) # set layers to render layers = list(reversed([lyr for lyr in QgsProject.instance().mapLayers().values()])) ms.setLayers(layers) for lyr in QgsProject.instance().mapLayers().values(): print(lyr) # set extent rect = iface.mapCanvas().extent() print(rect) #rect.scale(1.1) ms.setExtent(rect) # set ouptut size ms.setOutputSize(img.size()) # setup qgis map renderer render = QgsMapRendererCustomPainterJob(ms, p) render.start() render.waitForFinished() p.end() # save image img.save('/tmp/test_render_'+str(xsize)+'_'+str(ysize)+'_'+str(dotspermeter)+'.png') print('Done') #wroclaw #lat , lon , zoom (1128.5 corresponds to 18) , xsize , ysize , dotspermeter conf=[ [51.11, 17.032222, 1128.5, 1540, 770, 1], [51.11, 17.032222, 1128.5, 1540, 770, 10], # dotspermeter increased, no difference(?); I tried many values [51.11, 17.032222, 1128.5, 15400, 7700, 1], [51.11, 17.032222, 2257, 3080, 1540, 1], [51.11, 17.032222, 4514, 6160, 3080, 1], [51.11, 17.032222, 1128.5*8, 1540*8, 770*8, 1], [51.11, 17.032222, 1128.5, 1550, 775, 1], [51.11, 17.032222, 1128.5, 1546, 773, 1], ] lat , lon , zoom , xsize , ysize , dotspermeter = conf[7] canvas = iface.mapCanvas() x, y = to3857Coords(lat, lon) canvas.setCenter(QgsPointXY(x, y)) canvas.zoomScale(zoom) saveImg(xsize, ysize, dotspermeter Continue reading...