import os import tempfile from PIL import Image from pixels2svg import pixels2svg import gradio as gr def vectorize_png_to_svg(input_path: str) -> str: """ Take a PNG filepath, vectorize it, and return SVG text. """ with Image.open(input_path) as im: im = im.convert("RGBA") tmp_png = tempfile.NamedTemporaryFile(delete=False, suffix=".png") im.save(tmp_png.name, "PNG") drawing = pixels2svg(tmp_png.name) svg_text = drawing.tostring() os.remove(tmp_png.name) return svg_text def gradio_vectorize(image_path): if image_path is None: return None svg_text = vectorize_png_to_svg(image_path) tmp_svg = tempfile.NamedTemporaryFile(delete=False, suffix=".svg") with open(tmp_svg.name, "w", encoding="utf-8") as f: f.write(svg_text) return tmp_svg.name with gr.Blocks() as demo: gr.Markdown("⥏⥑ 𓍴 -Vectorizer- 𓍴 ⥏⥑") gr.Markdown("PNG📷 ➲ SVG💾.") with gr.Row(): in_img = gr.Image(type="filepath", label="📷PNG input📷") out_file = gr.File(label="💾SVG output💾") run_btn = gr.Button("♻️ Vectorize ♻️") run_btn.click(fn=gradio_vectorize, inputs=in_img, outputs=out_file) if __name__ == "__main__": demo.launch()