Add option to [not] overwrite original SVG file

This commit is contained in:
Daniel Rojas 2020-11-15 11:42:17 +01:00
parent d4dc19cac5
commit cc93a330fb

View File

@ -4,13 +4,15 @@
import re
import base64
from pathlib import Path
import os
def embed_svg_images(fn):
fn = Path(fn).resolve()
def embed_svg_images(filename_in: Path, overwrite: bool = True):
filename_in = Path(filename_in).resolve()
filename_out = f'{filename_in.with_suffix("")}.b64.svg'
images_b64 = {} # cache base-64 encoded images
num_images = 0 # just for debugging
re_xlink=re.compile(r"xlink:href=\"(?P<URL>.*?)\"", re.IGNORECASE)
with open(fn) as file_in, open(f'{fn.with_suffix("")}.b64.svg','w') as file_out:
with open(filename_in) as file_in, open(filename_out,'w') as file_out:
for line in file_in:
for xlink in re_xlink.finditer(line):
num_images = num_images + 1
@ -19,7 +21,7 @@ def embed_svg_images(fn):
if not imgurl in images_b64:
print(' ✅This URL is new')
if not Path(imgurl).is_absolute(): # resolve relative image path
imgurl_abs = (Path(fn).parent / imgurl).resolve()
imgurl_abs = (Path(filename_in).parent / imgurl).resolve()
print(imgurl, '-->', imgurl_abs)
else:
imgurl_abs = imgurl
@ -34,6 +36,10 @@ def embed_svg_images(fn):
f'data:image/png;base64, {images_b64[imgurl]}')
file_out.write(line)
if overwrite:
os.remove(filename_in)
os.rename(filename_out, filename_in)
print(f'Embedded {num_images} instances of {len(images_b64)} different images.')
print()