1
2import io
3
4try:
5 import cairosvg
6except ImportError:
7 import warnings
8 from .missing import MissingModule
9 msg = 'CairoSVG will need to be install 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