diff --git a/src/wireviz/svgembed.py b/src/wireviz/svgembed.py index 3226c8d..0999b8f 100644 --- a/src/wireviz/svgembed.py +++ b/src/wireviz/svgembed.py @@ -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.*?)\"", 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()