Beispiel #1
0
def svg_to_image(string, size=None):
    """ Convert a SVG document to a QImage.

    Parameters
    ----------
    string : basestring
        A Python string containing a SVG document.

    size : QSize, optional
        The size of the image that is produced. If not specified, the SVG
        document's default size is used.
    
    Raises
    ------
    ValueError
        If an invalid SVG string is provided.

    Returns
    -------
    A QImage of format QImage.Format_ARGB32.
    """
    if isinstance(string, unicode_type):
        string = string.encode('utf-8')

    renderer = QtSvg.QSvgRenderer(QtCore.QByteArray(string))
    if not renderer.isValid():
        raise ValueError('Invalid SVG data.')

    if size is None:
        size = renderer.defaultSize()
    image = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
    image.fill(0)
    painter = QtGui.QPainter(image)
    renderer.render(painter)
    return image
Beispiel #2
0
def load_cursor(filename, hotX=-1, hotY=-1):
    renderer = QtSvg.QSvgRenderer(filename)
    pm = QtGui.QPixmap(16, 16)
    pm.fill(QtCore.Qt.transparent)
    painter = QtGui.QPainter(pm)
    renderer.render(painter)
    del painter, renderer
    return QtGui.QCursor(pm, hotX, hotY)
 def addFile(self, fileName, size, mode, state):
     if fileName:
         abs = fileName
         if fileName[0] != ':':
             abs = QtCore.QFileInfo(fileName).absoluteFilePath()
         al = abs.lower()
         if (al.endswith(".svg") or al.endswith(".svgz") or
                 al.endswith(".svg.gz")):
             renderer = QtSvg.QSvgRenderer(abs)
             if renderer.isValid():
                 self._svgFiles[(mode, state)] = abs
         else:
             pm = QtGui.QPixmap(abs)
             if pm is not None:
                 self.addPixmap(pm, mode, state)
Beispiel #4
0
def svg_to_np_qt(svg_bytestring, size):
    """ Renders a svg bytestring as a RGB image in a numpy array
    However, the QT backend seems to have some issues
    """
    if isinstance(svg_bytestring, str):
        svg_bytestring = bytes(svg_bytestring, 'ascii')
    ren = QtSvg.QSvgRenderer(svg_bytestring)
    assert ren.isValid(), "SVG rendering failed"

    qimg = QtGui.QImage(
        size[0], size[1],
        QtGui.QImage.Format_RGB32)  # QtGui.QImage.Format_ARGB32_Premultiplied)
    # TODO colors is wrong - maybe see https://doc.qt.io/qt-5/qimage.html
    # raise NotImplementedError #TODO handle size/dpi

    imagePainter = QtGui.QPainter(qimg)
    ren.render(imagePainter)
    imagePainter.end()
    arr = qimage2ndarray.byte_view(qimg)
    return arr
    def pixmap(self, size, mode, state):
        # Check if the palette has changed (if so invalidate cache)
        if self._palette_key != QtWidgets.QApplication.palette().cacheKey():
            QtGui.QPixmapCache.clear()
            self._set_replacements_from_palette()
        pmckey = self._make_cache_key(size, mode, state)
        pm = QtGui.QPixmapCache.find(pmckey)
        if pm:
            return pm

        if (mode, state) in self._addedPixmaps:
            pm = self._addedPixmaps[(mode, state)]
            if pm is not None and pm.size() == size:
                return pm

        renderer = QtSvg.QSvgRenderer()
        self._loadDataForModeAndState(renderer, mode, state)
        if not renderer.isValid():
            return QtGui.QPixmap()

        actualSize = renderer.defaultSize()
        if actualSize is not None:
            actualSize.scale(size, QtCore.Qt.KeepAspectRatio)

        img = QtGui.QImage(actualSize, QtGui.QImage.Format_ARGB32_Premultiplied)
        img.fill(0x00000000)
        p = QtGui.QPainter(img)
        renderer.render(p)
        p.end()
        pm = QtGui.QPixmap.fromImage(img)
        opt = QtWidgets.QStyleOption()
        opt.palette = QtWidgets.QApplication.palette()
        if self.use_qt_disabled or mode != QtGui.QIcon.Disabled:
            generated = QtWidgets.QApplication.style().generatedIconPixmap(mode, pm, opt)
            if generated is not None:
                pm = generated

        if pm is not None:
            QtGui.QPixmapCache.insert(pmckey, pm)

        return pm
Beispiel #6
0
 def __init__(self, parent=None, icons=None):
     if icons is None or len(icons) < 1:
         icons = []
         path = os.path.dirname(__file__)
         for fn in [
                 path + "/../images/visibility_on.svg",
                 path + "/../images/visibility_off.svg"
         ]:
             renderer = QtSvg.QSvgRenderer(fn)
             pm = QtGui.QPixmap(12, 12)
             pm.fill(Qt.transparent)
             painter = QtGui.QPainter(pm)
             renderer.render(painter)
             icons.append(pm)
         icons = tuple(icons)
     elif len(icons) < 2:
         icons = tuple(icons) + (QtGui.QPixmap(), )
     else:
         icons = tuple(icons)
     self.icons = icons
     self.margin = 2
     super(VisbilityDelegate, self).__init__(parent)