File size: 2,480 Bytes
0db0341
 
 
35a7f8f
0db0341
95fc1cb
 
4c45b50
95fc1cb
 
4c45b50
95fc1cb
 
 
0db0341
35a7f8f
ad49d4a
35a7f8f
 
 
4c45b50
35a7f8f
216e8c5
 
 
 
35a7f8f
 
 
95fc1cb
 
216e8c5
 
 
 
 
 
95fc1cb
216e8c5
 
0db0341
bd00297
0db0341
 
35a7f8f
 
 
0db0341
35a7f8f
95fc1cb
 
 
 
 
 
 
35a7f8f
95fc1cb
 
0db0341
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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()