| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- from PyQt4 import QtGui, QtCore, QtSvg
- import sys
- from xml import FileToTree, TreeToFile, NS_MAP
- from PIL import Image
- class SVG2PNG_View(QtGui.QGraphicsView):
- """
- Uses a graphics view to render an svg image.
- """
- def __init__(self, svgfile, pngfile, manipulate=None):
- ''' read a svg file and store it in rasterized form as a png image
- @param manipulate: callable that can manipulate the xml tree
- @type manipulate: callable
- '''
- QtGui.QGraphicsView.__init__(self)
-
- if manipulate is not None:
- tree = FileToTree(svgfile)
- manipulate(tree)
- TreeToFile(tree, svgfile + '.svg')
- item = QtSvg.QGraphicsSvgItem(svgfile + '.svg')
- else:
- item = QtSvg.QGraphicsSvgItem(svgfile)
-
- self.scene = QtGui.QGraphicsScene(self)
- item.setPos(QtCore.QPointF(0, 0))
- self.scene.addItem(item)
- self.setScene(self.scene)
-
- self.saveImage(pngfile)
-
- #~ img = Image.open(pngfile)
- #~ img = img.resize((int(img.size[0] * 0.5), int(img.size[1] * 0.5)))
- #~ img.save(pngfile)
-
- def saveImage(self, pngfile):
- """create a QImage and render graphics scene to it.
- """
- isize = self.scene.sceneRect().size().toSize()
- self.qimage = QtGui.QImage(isize, QtGui.QImage.Format_ARGB32)
- painter = QtGui.QPainter(self.qimage)
- self.scene.render(painter)
- self.qimage.save(pngfile)
- def svg2png(svgfile, pngfile, manipulate=None):
- SVG2PNG_View(svgfile, pngfile, manipulate=manipulate)
-
- def stripLayers(layername):
- def _inner(tree):
- for e in tree.xpath('//svg:g[not(@id="layer3")]', namespaces=NS_MAP):
- e.getparent().remove(e)
- return _inner
- p = tree.xpath('//svg:g/svg:path', namespaces=NS_MAP)[0]
- p.attrib['style'] = 'fill:#FFFFFF;'
- if __name__ == '__main__':
- app = QtGui.QApplication(sys.argv)
- svg2png('umic.svg', 'out.png', manipulate=stripLayers('asd'))
-
-
-
|