Programmatically generate SVG (vector) images, animations, and interactive Jupyter widgets
at 1.1.0 1.3 kB view raw
1 2import io 3 4try: 5 import cairosvg 6except (ImportError, OSError): 7 import warnings 8 from .missing import MissingModule 9 msg = 'CairoSVG will need to be installed to rasterize images: Install with `pip3 install cairosvg`' 10 cairosvg = MissingModule(msg) 11 warnings.warn(msg, RuntimeWarning) 12 13 14class Raster: 15 def __init__(self, pngData=None, pngFile=None): 16 self.pngData = pngData 17 self.pngFile = pngFile 18 def savePng(self, fname): 19 with open(fname, 'wb') as f: 20 f.write(self.pngData) 21 @staticmethod 22 def fromSvg(svgData): 23 pngData = cairosvg.svg2png(bytestring=svgData) 24 return Raster(pngData) 25 @staticmethod 26 def fromSvgToFile(svgData, outFile): 27 cairosvg.svg2png(bytestring=svgData, write_to=outFile) 28 return Raster(None, pngFile=outFile) 29 def _repr_png_(self): 30 if self.pngData: 31 return self.pngData 32 elif self.pngFile: 33 try: 34 with open(self.pngFile, 'rb') as f: 35 return f.read() 36 except TypeError: 37 pass 38 try: 39 self.pngFile.seek(0) 40 return self.pngFile.read() 41 except io.UnsupportedOperation: 42 pass 43