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()