vectorize / app.py
x0-0x's picture
Update app.py
08ffb09 verified
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()