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
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)
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
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)