diff --git a/src/wireviz/svgembed.py b/src/wireviz/svgembed.py index ab6b9f1e..c8d637c8 100644 --- a/src/wireviz/svgembed.py +++ b/src/wireviz/svgembed.py @@ -8,6 +8,20 @@ mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"} +# TODO: Share cache and code between data_URI_base64() and embed_svg_images() +def data_URI_base64(file: Union[str, Path], media: str = "image") -> str: + """Return Base64-encoded data URI of input file.""" + file = Path(file) + b64 = base64.b64encode(file.read_bytes()).decode("utf-8") + uri = f"data:{media}/{get_mime_subtype(file)};base64, {b64}" + # print(f"data_URI_base64('{file}', '{media}') -> {len(uri)}-character URI") + if len(uri) > 65535: + print( + "data_URI_base64(): Warning: Browsers might have different URI length limitations" + ) + return uri + + def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str: images_b64 = {} # cache of base64-encoded images diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index 6fde7cdd..e939c6f2 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -6,6 +6,7 @@ from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz.DataClasses import Metadata, Options +from wireviz.svgembed import data_URI_base64 from wireviz.wv_gv_html import html_line_breaks from wireviz.wv_helper import ( flatten2d, @@ -81,7 +82,7 @@ def generate_html_output( "": options.fontname, "": wv_colors.translate_color(options.bgcolor, "hex"), "": svgdata, - # TODO: "": base64 of png file + "": data_URI_base64(f"{filename}.png"), "": str(filename), "": Path(filename).stem, "": bom_html,