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)