本文整理汇总了Python中qgis.core.QgsLayout.renderContext方法的典型用法代码示例。如果您正苦于以下问题:Python QgsLayout.renderContext方法的具体用法?Python QgsLayout.renderContext怎么用?Python QgsLayout.renderContext使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsLayout
的用法示例。
在下文中一共展示了QgsLayout.renderContext方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: testRenderRegionToImage
# 需要导入模块: from qgis.core import QgsLayout [as 别名]
# 或者: from qgis.core.QgsLayout import renderContext [as 别名]
def testRenderRegionToImage(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(560, 509)
image = exporter.renderRegionToImage(QRectF(5, 10, 110, 100), size)
self.assertFalse(image.isNull())
rendered_file_path = os.path.join(self.basetestpath, 'test_rendertoimageregionsize.png')
image.save(rendered_file_path, "PNG")
self.assertTrue(self.checkImage('rendertoimageregionsize', 'rendertoimageregionsize', rendered_file_path))
# using layout dpi
l.renderContext().setDpi(40)
image = exporter.renderRegionToImage(QRectF(5, 10, 110, 100))
self.assertFalse(image.isNull())
rendered_file_path = os.path.join(self.basetestpath, 'test_rendertoimageregiondpi.png')
image.save(rendered_file_path, "PNG")
self.assertTrue(self.checkImage('rendertoimageregiondpi', 'rendertoimageregiondpi', rendered_file_path))
# overriding dpi
image = exporter.renderRegionToImage(QRectF(5, 10, 110, 100), QSize(), 80)
self.assertFalse(image.isNull())
rendered_file_path = os.path.join(self.basetestpath, 'test_rendertoimageregionoverridedpi.png')
image.save(rendered_file_path, "PNG")
self.assertTrue(self.checkImage('rendertoimageregionoverridedpi', 'rendertoimageregionoverridedpi', rendered_file_path))
示例2: TestLayoutBase
# 需要导入模块: from qgis.core import QgsLayout [as 别名]
# 或者: from qgis.core.QgsLayout import renderContext [as 别名]
class TestLayoutBase(TestQgsPalLabeling):
layer = None
""":type: QgsVectorLayer"""
@classmethod
def setUpClass(cls):
if not cls._BaseSetup:
TestQgsPalLabeling.setUpClass()
# the blue background (set via layer style) to match renderchecker's
TestQgsPalLabeling.loadFeatureLayer('background', True)
cls._TestKind = 0 # OutputKind.(Img|Svg|Pdf)
@classmethod
def tearDownClass(cls):
"""Run after all tests"""
TestQgsPalLabeling.tearDownClass()
cls.removeMapLayer(cls.layer)
cls.layer = None
# avoid crash on finish, probably related to https://bugreports.qt.io/browse/QTBUG-35760
QThreadPool.globalInstance().waitForDone()
def setUp(self):
"""Run before each test."""
super(TestLayoutBase, self).setUp()
self._TestImage = ''
# ensure per test map settings stay encapsulated
self._TestMapSettings = self.cloneMapSettings(self._MapSettings)
self._Mismatch = 0
self._ColorTol = 0
self._Mismatches.clear()
self._ColorTols.clear()
def _set_up_composition(self, width, height, dpi, engine_settings):
# set up layout and add map
self._c = QgsLayout(QgsProject.instance())
""":type: QgsLayout"""
# self._c.setUseAdvancedEffects(False)
self._c.renderContext().setDpi(dpi)
# 600 x 400 px = 211.67 x 141.11 mm @ 72 dpi
paperw = width * 25.4 / dpi
paperh = height * 25.4 / dpi
page = QgsLayoutItemPage(self._c)
page.attemptResize(QgsLayoutSize(paperw, paperh))
self._c.pageCollection().addPage(page)
# NOTE: do not use QgsLayoutItemMap(self._c, 0, 0, paperw, paperh) since
# it only takes integers as parameters and the composition will grow
# larger based upon union of item scene rectangles and a slight buffer
# see end of QgsComposition::compositionBounds()
# add map as small graphics item first, then set its scene QRectF later
self._cmap = QgsLayoutItemMap(self._c)
self._cmap.attemptSetSceneRect(QRectF(10, 10, 10, 10))
""":type: QgsLayoutItemMap"""
self._cmap.setFrameEnabled(False)
self._cmap.setLayers(self._TestMapSettings.layers())
if self._TestMapSettings.labelingEngineSettings().flags() & QgsLabelingEngineSettings.UsePartialCandidates:
self._cmap.setMapFlags(QgsLayoutItemMap.ShowPartialLabels)
self._c.addLayoutItem(self._cmap)
# now expand map to fill page and set its extent
self._cmap.attemptSetSceneRect(QRectF(0, 0, paperw, paperw))
self._cmap.setExtent(self.aoiExtent())
# self._cmap.updateCachedImage()
# composition takes labeling engine settings from project
QgsProject.instance().setLabelingEngineSettings(engine_settings)
# noinspection PyUnusedLocal
def _get_layout_image(self, width, height, dpi):
image = QImage(QSize(width, height),
self._TestMapSettings.outputImageFormat())
image.fill(QColor(152, 219, 249).rgb())
image.setDotsPerMeterX(dpi / 25.4 * 1000)
image.setDotsPerMeterY(dpi / 25.4 * 1000)
p = QPainter(image)
p.setRenderHint(
QPainter.Antialiasing,
self._TestMapSettings.testFlag(QgsMapSettings.Antialiasing)
)
exporter = QgsLayoutExporter(self._c)
exporter.renderPage(p, 0)
p.end()
# image = self._c.printPageAsRaster(0)
# """:type: QImage"""
if image.isNull():
return False, ''
filepath = getTempfilePath('png')
res = image.save(filepath, 'png')
if not res:
os.unlink(filepath)
filepath = ''
return res, filepath
def _get_layout_svg_image(self, width, height, dpi):
svgpath = getTempfilePath('svg')
temp_size = os.path.getsize(svgpath)
#.........这里部分代码省略.........