image-to-webp / app.py
hf1agideia's picture
Update app.py
ac16806 verified
import gradio as gr
from PIL import Image
import os
import tempfile
def converter_imagens(caminhos_imagens, altura_max, largura_max):
arquivos_convertidos = []
for caminho_imagem in caminhos_imagens:
img = Image.open(caminho_imagem).convert("RGBA") # Garante que a imagem tenha um canal alfa
largura_orig, altura_orig = img.size
# Define as novas dimensões respeitando os limites
if altura_orig > altura_max or largura_orig > largura_max:
if altura_orig / altura_max > largura_orig / largura_max:
nova_altura = altura_max
nova_largura = int((nova_altura / altura_orig) * largura_orig)
else:
nova_largura = largura_max
nova_altura = int((nova_largura / largura_orig) * altura_orig)
else:
nova_largura, nova_altura = largura_orig, altura_orig
img = img.resize((nova_largura, nova_altura), Image.LANCZOS)
# Define o caminho do arquivo convertido com o mesmo nome, mas com a extensão .webp
nome_base = os.path.splitext(os.path.basename(caminho_imagem))[0]
arquivo_temp = tempfile.NamedTemporaryFile(delete=False, suffix=".webp", prefix=nome_base + "_")
img.save(arquivo_temp, format='WEBP')
arquivo_temp.close()
arquivos_convertidos.append(arquivo_temp.name)
return arquivos_convertidos
interface = gr.Interface(
fn=converter_imagens,
inputs=[
gr.Files(type="filepath", label="Carregar Imagens"),
gr.Number(label="Altura Máxima (px) Max Height", value=100, precision=0),
gr.Number(label="Largura Máxima (px) Max Width", value=200, precision=0)
],
outputs=gr.Files(label="Imagens Convertidas"),
title="Conversor de Imagens para .webp",
description="Carregue imagens para convertê-las para o formato .webp com altura e largura máximas personalizadas."
)
interface.launch()