apb_extra_utils.png2svg
1# coding=utf-8 2# 3# Author: Ernesto Arredondo Martinez (ernestone@gmail.com) 4# Created: 7/6/19 18:23 5# Last modified: 7/6/19 18:21 6# Copyright (c) 2019 7 8# Convert a file png in a SVG file 9 10import base64 11import os 12 13from PIL import Image 14 15 16def png2svg(path_png, w_svg=None, h_svg=None, w_png=None, h_png=None, centre_x_png=0, centre_y_png=0): 17 svg_string = """<?xml version="1.0" encoding="UTF-8" standalone="no"?> 18 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 19 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 20 width="{w_svg}mm" height="{h_svg}mm" viewBox="0 0 {w_svg} {h_svg}"> 21 <image xlink:href="data:image/png;base64,{base64png}" width="{w_png}" height="{h_png}" x="{centre_x_png}" y="{centre_y_png}" /> 22 </svg> 23 """ 24 25 with open(path_png, 'rb') as pngFile: 26 base64String = base64.b64encode(pngFile.read()).decode("ascii") 27 28 path_svg = os.path.splitext(path_png)[0]+".svg" 29 30 with open(path_svg,'w') as svgFile: 31 if not w_png: 32 with Image.open(path_png) as img: 33 w_png, h_png = img.size 34 35 if not w_svg: 36 w_svg = str(w_png) + "px" 37 h_svg = str(h_png) + "px" 38 39 svgFile.write(svg_string.format(w_svg=w_svg, 40 h_svg=h_svg, 41 w_png=w_png, 42 h_png=h_png, 43 centre_x_png=centre_x_png, 44 centre_y_png=centre_y_png, 45 base64png=base64String)) 46 47 print('Converted '+ path_png + ' to ' + path_svg) 48 49 50if __name__ == '__main__': 51 import fire 52 fire.Fire()
def
png2svg( path_png, w_svg=None, h_svg=None, w_png=None, h_png=None, centre_x_png=0, centre_y_png=0):
17def png2svg(path_png, w_svg=None, h_svg=None, w_png=None, h_png=None, centre_x_png=0, centre_y_png=0): 18 svg_string = """<?xml version="1.0" encoding="UTF-8" standalone="no"?> 19 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 20 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 21 width="{w_svg}mm" height="{h_svg}mm" viewBox="0 0 {w_svg} {h_svg}"> 22 <image xlink:href="data:image/png;base64,{base64png}" width="{w_png}" height="{h_png}" x="{centre_x_png}" y="{centre_y_png}" /> 23 </svg> 24 """ 25 26 with open(path_png, 'rb') as pngFile: 27 base64String = base64.b64encode(pngFile.read()).decode("ascii") 28 29 path_svg = os.path.splitext(path_png)[0]+".svg" 30 31 with open(path_svg,'w') as svgFile: 32 if not w_png: 33 with Image.open(path_png) as img: 34 w_png, h_png = img.size 35 36 if not w_svg: 37 w_svg = str(w_png) + "px" 38 h_svg = str(h_png) + "px" 39 40 svgFile.write(svg_string.format(w_svg=w_svg, 41 h_svg=h_svg, 42 w_png=w_png, 43 h_png=h_png, 44 centre_x_png=centre_x_png, 45 centre_y_png=centre_y_png, 46 base64png=base64String)) 47 48 print('Converted '+ path_png + ' to ' + path_svg)