def testRenderPageToImage(self): l = QgsLayout(QgsProject.instance()) l.initializeDefaults() # add some items item1 = QgsLayoutItemShape(l) item1.attemptSetSceneRect(QRectF(10, 20, 100, 150)) fill = QgsSimpleFillSymbolLayer() fill_symbol = QgsFillSymbol() fill_symbol.changeSymbolLayer(0, fill) fill.setColor(Qt.green) fill.setStrokeStyle(Qt.NoPen) item1.setSymbol(fill_symbol) l.addItem(item1) exporter = QgsLayoutExporter(l) size = QSize(1122, 794) # bad page numbers image = exporter.renderPageToImage(-1, size) self.assertTrue(image.isNull()) image = exporter.renderPageToImage(1, size) self.assertTrue(image.isNull()) # good page image = exporter.renderPageToImage(0, size) self.assertFalse(image.isNull()) rendered_file_path = os.path.join(self.basetestpath, 'test_rendertoimagepage.png') image.save(rendered_file_path, "PNG") self.assertTrue(self.checkImage('rendertoimagepage', 'rendertoimagepage', rendered_file_path))
def testRenderPageToImage(self): l = QgsLayout(QgsProject.instance()) l.initializeDefaults() # add some items item1 = QgsLayoutItemShape(l) item1.attemptSetSceneRect(QRectF(10, 20, 100, 150)) fill = QgsSimpleFillSymbolLayer() fill_symbol = QgsFillSymbol() fill_symbol.changeSymbolLayer(0, fill) fill.setColor(Qt.green) fill.setStrokeStyle(Qt.NoPen) item1.setSymbol(fill_symbol) l.addItem(item1) exporter = QgsLayoutExporter(l) size = QSize(1122, 794) # bad page numbers image = exporter.renderPageToImage(-1, size) self.assertTrue(image.isNull()) image = exporter.renderPageToImage(1, size) self.assertTrue(image.isNull()) # good page image = exporter.renderPageToImage(0, size) self.assertFalse(image.isNull()) rendered_file_path = os.path.join(self.basetestpath, 'test_rendertoimagepage.png') image.save(rendered_file_path, "PNG") self.assertTrue(self.checkImage('rendertoimagepage', 'rendertoimagepage', rendered_file_path))
def export_map(project_path, layout_name, pdf_path, thumbnail_path=None): # Open project project_instance = QgsProject.instance() project_instance.setFileName(project_path) project_instance.read() # Open layout manager = QgsProject.instance().layoutManager() layout = manager.layoutByName(layout_name) # Export PDF exporter = QgsLayoutExporter(layout) exporter.exportToPdf(pdf_path, QgsLayoutExporter.PdfExportSettings()) if thumbnail_path: # Generate a thumbnail image image = exporter.renderPageToImage(0, dpi=50) image.save(thumbnail_path)
def save_map_image(image_path, zoom_to_layer, canvas): """Creates and saves a PNG image of the map canvas zoomed to the `zoom_to_layer` layer's extent. :param image_path: destination file path for the image :type image_path: str :param zoom_to_layer: vector layer for the map extent :type zoom_to_layer: QgsVectorLayer :param canvas: map canvas :type canvas: QgsMapCanvas """ extent = zoom_to_layer.extent() canvas.setExtent(extent) p = QgsProject.instance() layout = QgsLayout(p) page = QgsLayoutItemPage(layout) page.setPageSize(QgsLayoutSize( 1200, 700, QgsUnitTypes.LayoutMillimeters)) collection = layout.pageCollection() collection.addPage(page) item_map = QgsLayoutItemMap(layout) item_map.attemptSetSceneRect(QRectF(0, 0, 1200, 700)) item_map.setCrs(zoom_to_layer.crs()) item_map.zoomToExtent(extent) layout.addItem(item_map) dpmm = 200/25.4 width = int(dpmm * page.pageSize().width()) height = int(dpmm * page.pageSize().height()) size = QSize(width, height) exporter = QgsLayoutExporter(layout) image = exporter.renderPageToImage(0, size) image.save(image_path, 'PNG')