Spaces:
Running
Running
import gradio as gr | |
from PIL import Image | |
import os | |
import tempfile | |
def get_image_info(image): | |
# Obtener el tamaño del archivo en KB | |
file_size = os.path.getsize(image.name) / 1024 # Convertir a KB | |
# Abrir la imagen para mostrarla | |
img = Image.open(image) | |
return img, f"Tamaño del archivo: {file_size:.2f} KB" | |
def convert_image_format(image, target_format): | |
with tempfile.TemporaryDirectory() as tmpdirname: | |
# Crear una ruta para el archivo de salida en el directorio temporal | |
output_name = os.path.join(tmpdirname, f"output_image.{target_format.lower()}") | |
# Abrir la imagen con PIL | |
img = Image.open(image) | |
# Si el formato es JPG, convertir a RGB si la imagen es RGBA o tiene transparencia | |
if target_format.lower() == "jpg": | |
img = img.convert("RGB") | |
# Guardar la imagen en el formato deseado | |
img.save(output_name, format=target_format.upper()) | |
# Calcular el tamaño del nuevo archivo | |
file_size = os.path.getsize(output_name) / 1024 # Convertir a KB | |
# Volver a abrir la imagen convertida para que Gradio la pueda mostrar | |
converted_img = Image.open(output_name) | |
# Convertir a un formato que Gradio pueda mostrar y manejar adecuadamente | |
converted_img = converted_img.convert("RGB") | |
# Retornar la imagen convertida para visualización en Gradio y su tamaño | |
return converted_img, f"Tamaño del archivo convertido: {file_size:.2f} KB" | |
# Interfaz de Gradio | |
with gr.Blocks() as demo: | |
gr.Markdown("### Conversor de formatos de imagen") | |
image_input = gr.File(label="Sube tu imagen", file_types=['image']) | |
format_dropdown = gr.Dropdown(label="Selecciona el formato de salida", choices=["jpg", "png", "webp"], value="webp") | |
convert_button = gr.Button("Convertir") | |
# Mostrar la imagen original y su tamaño | |
image_output = gr.Image(label="Imagen Original") | |
size_output = gr.Text(label="Información del Archivo") | |
# Mostrar la imagen convertida y su tamaño | |
converted_image_output = gr.Image(label="Imagen Convertida") | |
converted_size_output = gr.Text(label="Información del Archivo Convertido") | |
image_input.change(fn=get_image_info, inputs=image_input, outputs=[image_output, size_output]) | |
convert_button.click(fn=convert_image_format, inputs=[image_input, format_dropdown], outputs=[converted_image_output, converted_size_output]) | |
demo.launch() | |