HybaaAI3's picture
Update app.py
edd6021 verified
import io
import gradio as gr
from PIL import Image
import vtracer
import tempfile
def converter_imagem(imagem, modo_cor, hierarquico, modo, filtro_ruido,
precisao_cor, diferenca_camada, limite_canto,
limite_comprimento, max_iteracoes, limite_emenda, precisao_caminho):
"""Converte uma imagem para SVG usando vtracer com parâmetros personalizáveis."""
# Converter a imagem do Gradio para bytes para compatibilidade com o vtracer
img_byte_array = io.BytesIO()
imagem.save(img_byte_array, format='PNG')
img_bytes = img_byte_array.getvalue()
# Realizar a conversão
svg_str = vtracer.convert_raw_image_to_svg(
img_bytes,
img_format='png',
colormode=modo_cor.lower(),
hierarchical=hierarquico.lower(),
mode=modo.lower(),
filter_speckle=int(filtro_ruido),
color_precision=int(precisao_cor),
layer_difference=int(diferenca_camada),
corner_threshold=int(limite_canto),
length_threshold=float(limite_comprimento),
max_iterations=int(max_iteracoes),
splice_threshold=int(limite_emenda),
path_precision=int(precisao_caminho)
)
# Salvar o SVG em um arquivo temporário
arquivo_temporario = tempfile.NamedTemporaryFile(delete=False, suffix='.svg')
arquivo_temporario.write(svg_str.encode('utf-8'))
arquivo_temporario.close()
return gr.HTML(f'<svg viewBox="0 0 {imagem.width} {imagem.height}">{svg_str}</svg>'), arquivo_temporario.name
# Interface Gradio
iface = gr.Blocks()
with iface:
gr.Interface(
fn=converter_imagem,
inputs=[
gr.Image(type="pil", label="Enviar Imagem"),
gr.Radio(choices=["Colorido", "Binário"], value="Colorido", label="Modo de Cor"),
gr.Radio(choices=["Empilhado", "Recortado"], value="Empilhado", label="Hierárquico"),
gr.Radio(choices=["Spline", "Polígono", "Nenhum"], value="Spline", label="Modo"),
gr.Slider(minimum=1, maximum=10, value=4, step=1, label="Filtro de Ruído"),
gr.Slider(minimum=1, maximum=8, value=6, step=1, label="Precisão de Cor"),
gr.Slider(minimum=1, maximum=32, value=16, step=1, label="Diferença de Camada"),
gr.Slider(minimum=10, maximum=90, value=60, step=1, label="Limite de Canto"),
gr.Slider(minimum=3.5, maximum=10, value=4.0, step=0.5, label="Limite de Comprimento"),
gr.Slider(minimum=1, maximum=20, value=10, step=1, label="Máx. Iterações"),
gr.Slider(minimum=10, maximum=90, value=45, step=1, label="Limite de Emenda"),
gr.Slider(minimum=1, maximum=10, value=8, step=1, label="Precisão do Caminho")
],
outputs=[
gr.HTML(label="Saída SVG"),
gr.File(label="Baixar SVG")
]
)
iface.launch()