コード例 #1
0
ファイル: funcplotter3.py プロジェクト: user8/furry-wight
	def __init__(self, image_file=None, default_wh=[1024.0, 1024.0], progress_handler = None):
		self.clear()
		self.image = None

		if progress_handler:
			self.ph = progress_handler
		else:
			self.ph = lambda i: None
			self.ph._message = ''
			self.ph._maxval = 0

		if image_file and os.path.exists(image_file):
			# image tracing shall consist of 256 index colors ranked by luma
			img = QImage(image_file)

			if not img.isGrayscale() and QMessageBox("Image is not in grayscale",
													 "Convert RGB image to grayscale?",
													 QMessageBox.Question,
													 QMessageBox.Yes, QMessageBox.No, 0).exec_() == QMessageBox.Yes:
				self.ph._message = 'Converting image to grayscale'
				self.ph._maxval = img.height()
				for y in range(img.height()):
					for x in range(img.width()):
						lightness = qGray(img.pixel(x, y))
						img.setPixel(x, y, (lightness<<16) + (lightness<<8) + lightness)
					self.ph(y)

			colortable = [QColor(i, i, i).rgb() for i in xrange(256)]
			self.image = img.convertToFormat(QImage.Format_Indexed8, colortable)
			w, h = float(self.image.width()), float(self.image.height())
			self.dpi = img.dotsPerMeterX() / 1000.0 * 25.4
		else:
			w, h = default_wh
			self.dpi = 96.0

		self.wh = [w, h]

		self.x1, self.y1, self.x2, self.y2 = [i/max(w, h) for i in [-w, -h, w, h]]
		self.dx = self.x2 - self.x1
		self.dy = self.y2 - self.y1
		# Resolution field in SVG units per pixel
		self.scale = self.dx / w
コード例 #2
0
ファイル: renderer.py プロジェクト: candela-it/sunlumo
    def getLegendGraphic(self, params):
        qgsLayer = self.layerRegistry.mapLayer(params.get('layer'))

        boxSpace = 1
        layerSpace = 2
        # layerTitleSpace = 3
        symbolSpace = 2
        iconLabelSpace = 2
        symbolWidth = 5
        symbolHeight = 3

        drawLegendLabel = True

        rootGroup = QgsLayerTreeGroup()
        rootGroup.addLayer(qgsLayer)
        # layer = QgsLayerTreeLayer(qgsLayer)

        # if qgsLayer.title():
        #     layer.setLayerName(qgsLayer.title())

        legendModel = QgsLayerTreeModel(rootGroup)

        rootChildren = rootGroup.children()

        img_tmp = QImage(QSize(1, 1), QImage.Format_ARGB32_Premultiplied)
        dpm = 1 / 0.00028
        img_tmp.setDotsPerMeterX(dpm)
        img_tmp.setDotsPerMeterY(dpm)

        dpmm = img_tmp.dotsPerMeterX() / 1000.0

        del img_tmp

        legendSettings = QgsLegendSettings()
        legendSettings.setTitle('')
        legendSettings.setBoxSpace(boxSpace)
        legendSettings.rstyle(QgsComposerLegendStyle.Subgroup).setMargin(QgsComposerLegendStyle.Top, layerSpace)

        legendSettings.rstyle(QgsComposerLegendStyle.Symbol).setMargin(QgsComposerLegendStyle.Top, symbolSpace)
        legendSettings.rstyle(QgsComposerLegendStyle.SymbolLabel).setMargin(QgsComposerLegendStyle.Left, iconLabelSpace)
        legendSettings.setSymbolSize(QSizeF(symbolWidth, symbolHeight))
        # legendSettings.rstyle(QgsComposerLegendStyle.Subgroup).setFont(layerFont)
        # legendSettings.rstyle(QgsComposerLegendStyle.SymbolLabel).setFont(itemFont)
        # // TODO: not available: layer font color
        # legendSettings.setFontColor( itemFontColor );

        # for node in rootChildren:
        #     if (QgsLayerTree.isLayer(node)):
        #         QgsLegendRenderer.setNodeLegendStyle(node, QgsComposerLegendStyle.Subgroup)
        #     # rule item titles
        #     # if ( !mDrawLegendItemLabel )
        #     #     for legendNode in legendModel.layerLegendNodes(nodeLayer):
        #     #         legendNode.setUserLabel(' ')
        #     # }

        legendRenderer = QgsLegendRenderer(legendModel, legendSettings)
        minSize = legendRenderer.minimumSize()
        s = QSize(minSize.width() * dpmm, minSize.height() * dpmm)

        img = QImage(s, QImage.Format_ARGB32_Premultiplied)
        # fill in the background
        color = QColor(0, 0, 0, 0)
        img.fill(color)

        p = QPainter()
        p.begin(img)

        p.setRenderHint(QPainter.Antialiasing, True)
        p.scale(dpmm, dpmm)
        legendRenderer.drawLegend(p)

        map_buffer = QBuffer()
        map_buffer.open(QIODevice.ReadWrite)

        img.save(map_buffer, 'PNG')
        # clean up

        map_buffer.close()
        p.end()

        # self.layerRegistry.removeAllMapLayers()
        return map_buffer.data()