only buffer for png renderings
This commit is contained in:
parent
b5089938de
commit
206825210f
1 changed files with 12 additions and 8 deletions
|
@ -17,7 +17,6 @@ class SVGImage:
|
||||||
self.height = self.top-self.bottom
|
self.height = self.top-self.bottom
|
||||||
self.scale = scale
|
self.scale = scale
|
||||||
self.buffer_px = int(math.ceil(buffer*self.scale))
|
self.buffer_px = int(math.ceil(buffer*self.scale))
|
||||||
self.buffer = self.buffer_px/self.scale
|
|
||||||
self.g = ET.Element('g', {})
|
self.g = ET.Element('g', {})
|
||||||
self.defs = ET.Element('defs')
|
self.defs = ET.Element('defs')
|
||||||
self.def_i = 0
|
self.def_i = 0
|
||||||
|
@ -25,24 +24,29 @@ class SVGImage:
|
||||||
self.last_altitude = None
|
self.last_altitude = None
|
||||||
self.blurs = set()
|
self.blurs = set()
|
||||||
|
|
||||||
def get_element(self):
|
def get_element(self, buffer=False):
|
||||||
|
width_px = self._trim_decimals(str(self.width*self.scale + (self.buffer_px*2 if buffer else 0)))
|
||||||
|
height_px = self._trim_decimals(str(self.height*self.scale + (self.buffer_px*2 if buffer else 0)))
|
||||||
|
offset_px = self._trim_decimals(str(-self.buffer_px)) if buffer else '0'
|
||||||
root = ET.Element('svg', {
|
root = ET.Element('svg', {
|
||||||
'width': self._trim_decimals(str(self.width*self.scale+self.buffer_px*2)),
|
'width': width_px,
|
||||||
'height': self._trim_decimals(str(self.height*self.scale+self.buffer_px*2)),
|
'height': height_px,
|
||||||
'xmlns:svg': 'http://www.w3.org/2000/svg',
|
'xmlns:svg': 'http://www.w3.org/2000/svg',
|
||||||
'xmlns': 'http://www.w3.org/2000/svg',
|
'xmlns': 'http://www.w3.org/2000/svg',
|
||||||
'xmlns:xlink': 'http://www.w3.org/1999/xlink',
|
'xmlns:xlink': 'http://www.w3.org/1999/xlink',
|
||||||
})
|
})
|
||||||
|
if buffer:
|
||||||
|
root.attrib['viewBox'] = ' '.join((offset_px, offset_px, width_px, height_px))
|
||||||
root.append(self.defs)
|
root.append(self.defs)
|
||||||
root.append(self.g)
|
root.append(self.g)
|
||||||
return root
|
return root
|
||||||
|
|
||||||
def get_xml(self):
|
def get_xml(self, buffer=False):
|
||||||
return ET.tostring(self.get_element()).decode()
|
return ET.tostring(self.get_element(buffer=buffer)).decode()
|
||||||
|
|
||||||
def get_png(self):
|
def get_png(self):
|
||||||
p = subprocess.run(('rsvg-convert', '--format', 'png'),
|
p = subprocess.run(('rsvg-convert', '--format', 'png'),
|
||||||
input=self.get_xml().encode(), stdout=subprocess.PIPE, check=True)
|
input=self.get_xml(buffer=True).encode(), stdout=subprocess.PIPE, check=True)
|
||||||
f = io.BytesIO(p.stdout)
|
f = io.BytesIO(p.stdout)
|
||||||
img = Image.open(f)
|
img = Image.open(f)
|
||||||
img = img.crop((self.buffer_px, self.buffer_px,
|
img = img.crop((self.buffer_px, self.buffer_px,
|
||||||
|
@ -62,7 +66,7 @@ class SVGImage:
|
||||||
return re.sub(r'([0-9]+)\.0', r'\1', re.sub(r'([0-9]+\.[0-9])[0-9]+', r'\1', data))
|
return re.sub(r'([0-9]+)\.0', r'\1', re.sub(r'([0-9]+\.[0-9])[0-9]+', r'\1', data))
|
||||||
|
|
||||||
def _create_geometry(self, geometry):
|
def _create_geometry(self, geometry):
|
||||||
geometry = translate(geometry, xoff=0-self.left+self.buffer, yoff=0-self.bottom-self.buffer)
|
geometry = translate(geometry, xoff=0-self.left, yoff=0-self.bottom)
|
||||||
geometry = scale(geometry, xfact=1, yfact=-1, origin=(self.width / 2, self.height / 2))
|
geometry = scale(geometry, xfact=1, yfact=-1, origin=(self.width / 2, self.height / 2))
|
||||||
geometry = scale(geometry, xfact=self.scale, yfact=self.scale, origin=(0, 0))
|
geometry = scale(geometry, xfact=self.scale, yfact=self.scale, origin=(0, 0))
|
||||||
element = ET.fromstring(self._trim_decimals(geometry.svg(0, '#FFFFFF')))
|
element = ET.fromstring(self._trim_decimals(geometry.svg(0, '#FFFFFF')))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue