예제 #1
0
    def plotSVG(self, width, height, output_file, _plotting_object = None):

        """Plots the data specified in the current input file as a page in a
        PDF file with the given width and height, writing the output to the
        specified output file. Returns the SVG object produced."""

        printer = QPrinter()
        svg = QSvgGenerator()
        svg.setFileName(output_file)
        svg.setSize(QSize(width, height))
        svg.setViewBox(QRect(0, 0, width, height))
        svg.setResolution(printer.resolution())
        return self._plot(width, height, svg, _plotting_object)[0]
예제 #2
0
파일: io.py 프로젝트: MissLitchi/sconcho
def export_scene(canvas, width, height, dpi, exportFileName):
    """ This function exports the scene to a file. """

    # need this to make sure we take away focus from
    # any currently selected legend items
    canvas.clearFocus()

    with HiddenStitchManager(canvas):

        # NOTE: We seem to need the 1px buffer region to avoid
        # the image being cut off
        margin = 10
        theScene = visible_bounding_rect(canvas.items())
        theScene.adjust(-margin, -margin, margin, margin)

        # check if user requested an svg file
        svg = True if QFileInfo(exportFileName).completeSuffix() == "svg" \
                else False

        if svg:
            generator = QSvgGenerator()
            generator.setFileName(exportFileName)
            generator.setSize(QSize(width, height))
            generator.setViewBox(QRect(0, 0, width, height))
            generator.setTitle("sconcho generated SVG image")
            generator.setDescription("this svg image was exported from "
                                     "a sconcho project")
            generator.setResolution(dpi)
        else:
            generator = QImage(width+2*margin, height+2*margin, 
                               QImage.Format_ARGB32_Premultiplied)
            generator.fill(1)

            inchesToMeter = 39.3700787
            generator.setDotsPerMeterX(dpi*inchesToMeter)
            generator.setDotsPerMeterY(dpi*inchesToMeter)


        painter = QPainter(generator)
        painter.setRenderHints(QPainter.SmoothPixmapTransform 
                               | QPainter.HighQualityAntialiasing 
                               | QPainter.TextAntialiasing )
        painter.setBackgroundMode(Qt.TransparentMode )

        canvas.render(painter, QRectF(), theScene )
        painter.end()

        if not svg:
            generator.save(exportFileName)
예제 #3
0
파일: io.py 프로젝트: etrushkin/sconcho
def export_scene(canvas, width, height, dpi, exportFileName):
    """ This function exports the scene to a file. """

    # need this to make sure we take away focus from
    # any currently selected legend items
    canvas.clearFocus()

    with HiddenStitchManager(canvas):

        # NOTE: We seem to need the 1px buffer region to avoid
        # the image being cut off
        margin = 10
        theScene = visible_bounding_rect(canvas.items())
        theScene.adjust(-margin, -margin, margin, margin)

        # check if user requested an svg file
        svg = True if QFileInfo(exportFileName).completeSuffix() == "svg" \
                else False

        if svg:
            generator = QSvgGenerator()
            generator.setFileName(exportFileName)
            generator.setSize(QSize(width, height))
            generator.setViewBox(QRect(0, 0, width, height))
            generator.setTitle("sconcho generated SVG image")
            generator.setDescription("this svg image was exported from "
                                     "a sconcho project")
            generator.setResolution(dpi)
        else:
            generator = QImage(width + 2 * margin, height + 2 * margin,
                               QImage.Format_ARGB32_Premultiplied)
            generator.fill(1)

            inchesToMeter = 39.3700787
            generator.setDotsPerMeterX(dpi * inchesToMeter)
            generator.setDotsPerMeterY(dpi * inchesToMeter)

        painter = QPainter(generator)
        painter.setRenderHints(QPainter.SmoothPixmapTransform
                               | QPainter.HighQualityAntialiasing
                               | QPainter.TextAntialiasing)
        painter.setBackgroundMode(Qt.TransparentMode)

        canvas.render(painter, QRectF(), theScene)
        painter.end()

        if not svg:
            generator.save(exportFileName)
    def _get_composer_svg_image(self, width, height, dpi):
        # from qgscomposer.cpp, QgsComposer::on_mActionExportAsSVG_triggered,
        # line 1909, near end of function
        svgpath = getTempfilePath('svg')
        temp_size = os.path.getsize(svgpath)

        svg_g = QSvgGenerator()
        # noinspection PyArgumentList
        svg_g.setTitle(QgsProject.instance().title())
        svg_g.setFileName(svgpath)
        # width and height in pixels
        # svg_w = int(self._c.paperWidth() * self._c.printResolution() / 25.4)
        # svg_h = int(self._c.paperHeight() * self._c.printResolution() / 25.4)
        svg_w = width
        svg_h = height
        svg_g.setSize(QSize(svg_w, svg_h))
        svg_g.setViewBox(QRect(0, 0, svg_w, svg_h))
        # because the rendering is done in mm, convert the dpi
        # svg_g.setResolution(self._c.printResolution())
        svg_g.setResolution(dpi)

        sp = QPainter(svg_g)
        self._c.renderPage(sp, 0)
        sp.end()

        if temp_size == os.path.getsize(svgpath):
            # something went pear-shaped
            return False, ''

        image = QImage(width, height, QImage.Format_ARGB32)
        image.fill(QColor(152, 219, 249).rgb())
        image.setDotsPerMeterX(dpi / 25.4 * 1000)
        image.setDotsPerMeterY(dpi / 25.4 * 1000)

        svgr = QSvgRenderer(svgpath)
        p = QPainter(image)
        svgr.render(p)
        p.end()

        filepath = getTempfilePath('png')
        res = image.save(filepath, 'png')
        if not res:
            os.unlink(filepath)
            filepath = ''
        # TODO: remove .svg file as well?

        return res, filepath
예제 #5
0
    def _get_composer_svg_image(self, width, height, dpi):
        # from qgscomposer.cpp, QgsComposer::on_mActionExportAsSVG_triggered,
        # near end of function
        svgpath = getTempfilePath('svg')
        temp_size = os.path.getsize(svgpath)

        svg_g = QSvgGenerator()
        # noinspection PyArgumentList
        svg_g.setTitle(QgsProject.instance().title())
        svg_g.setFileName(svgpath)
        svg_g.setSize(QSize(width, height))
        svg_g.setViewBox(QRect(0, 0, width, height))
        svg_g.setResolution(dpi)

        sp = QPainter(svg_g)
        self._c.renderPage(sp, 0)
        sp.end()

        if temp_size == os.path.getsize(svgpath):
            return False, ''

        image = QImage(width, height,
                       self._TestMapSettings.outputImageFormat())
        image.fill(QColor(152, 219, 249).rgb())
        image.setDotsPerMeterX(dpi / 25.4 * 1000)
        image.setDotsPerMeterY(dpi / 25.4 * 1000)

        svgr = QSvgRenderer(svgpath)
        p = QPainter(image)
        p.setRenderHint(
            QPainter.Antialiasing,
            self._TestMapSettings.testFlag(QgsMapSettings.Antialiasing))
        p.setRenderHint(QPainter.TextAntialiasing)
        svgr.render(p)
        p.end()

        filepath = getTempfilePath('png')
        res = image.save(filepath, 'png')
        if not res:
            os.unlink(filepath)
            filepath = ''
        # TODO: remove .svg file as well?

        return res, filepath
    def _get_composer_svg_image(self, width, height, dpi):
        # from qgscomposer.cpp, QgsComposer::on_mActionExportAsSVG_triggered,
        # near end of function
        svgpath = getTempfilePath('svg')
        temp_size = os.path.getsize(svgpath)

        svg_g = QSvgGenerator()
        # noinspection PyArgumentList
        svg_g.setTitle(QgsProject.instance().title())
        svg_g.setFileName(svgpath)
        svg_g.setSize(QSize(width, height))
        svg_g.setViewBox(QRect(0, 0, width, height))
        svg_g.setResolution(dpi)

        sp = QPainter(svg_g)
        self._c.renderPage(sp, 0)
        sp.end()

        if temp_size == os.path.getsize(svgpath):
            return False, ''

        image = QImage(width, height, self._TestMapSettings.outputImageFormat())
        image.fill(QColor(152, 219, 249).rgb())
        image.setDotsPerMeterX(dpi / 25.4 * 1000)
        image.setDotsPerMeterY(dpi / 25.4 * 1000)

        svgr = QSvgRenderer(svgpath)
        p = QPainter(image)
        p.setRenderHint(
            QPainter.Antialiasing,
            self._TestMapSettings.testFlag(QgsMapSettings.Antialiasing)
        )
        p.setRenderHint(QPainter.TextAntialiasing)
        svgr.render(p)
        p.end()

        filepath = getTempfilePath('png')
        res = image.save(filepath, 'png')
        if not res:
            os.unlink(filepath)
            filepath = ''
        # TODO: remove .svg file as well?

        return res, filepath