File size: 3,142 Bytes
0db0341
4dc3d40
0db0341
35a7f8f
0db0341
51c8f60
4c45b50
95fc1cb
3ef5903
 
35a7f8f
51c8f60
 
e3671eb
51c8f60
3ef5903
216e8c5
51c8f60
 
e3671eb
51c8f60
3ef5903
51c8f60
 
4dc3d40
51c8f60
e3671eb
51c8f60
3ef5903
4dc3d40
 
 
e3671eb
4dc3d40
3ef5903
51c8f60
e3671eb
 
 
 
 
 
0db0341
 
51c8f60
35a7f8f
 
51c8f60
 
e3671eb
 
 
 
 
 
95fc1cb
e3671eb
 
35a7f8f
e3671eb
 
4dc3d40
e3671eb
 
 
 
 
 
 
 
 
 
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
63
64
65
66
67
68
69
70
71
72
73
74
75
import gradio as gr
from PIL import Image
import os
import tempfile

def optimize_image(image):
    img = Image.open(image)
    
    original_size = os.path.getsize(image.name) / 1024  # tama帽o en KB
    
    with tempfile.TemporaryDirectory() as tmpdirname:
        lossless_output_path = os.path.join(tmpdirname, "lossless.png")
        img.save(lossless_output_path, format="PNG", optimize=True)
        lossless_size = os.path.getsize(lossless_output_path) / 1024
        lossless_img = Image.open(lossless_output_path)
        lossless_diff = original_size - lossless_size
        
        lossy_output_path = os.path.join(tmpdirname, "lossy.jpg")
        img.save(lossy_output_path, format="JPEG", quality=50, optimize=True)
        lossy_size = os.path.getsize(lossy_output_path) / 1024
        lossy_img = Image.open(lossy_output_path)
        lossy_diff = original_size - lossy_size
        
        reduced_output_path = os.path.join(tmpdirname, "reduced_resolution.jpg")
        reduced_img = img.resize((img.width // 2, img.height // 2), Image.LANCZOS)
        reduced_img.save(reduced_output_path, format="JPEG", quality=85, optimize=True)
        reduced_size = os.path.getsize(reduced_output_path) / 1024
        reduced_img = Image.open(reduced_output_path)
        reduced_diff = original_size - reduced_size

        webp_lossy_output_path = os.path.join(tmpdirname, "lossy.webp")
        img.save(webp_lossy_output_path, format="WEBP", quality=50, optimize=True)
        webp_lossy_size = os.path.getsize(webp_lossy_output_path) / 1024
        webp_lossy_img = Image.open(webp_lossy_output_path)
        webp_lossy_diff = original_size - webp_lossy_size
        
        return [
            lossless_img, f"Sin p茅rdida: {lossless_size:.2f} KB (diferencia: {-lossless_diff:.2f} KB)",
            lossy_img, f"Con p茅rdida: {lossy_size:.2f} KB (diferencia: {-lossy_diff:.2f} KB)",
            reduced_img, f"Reducci贸n de resoluci贸n: {reduced_size:.2f} KB (diferencia: {-reduced_diff:.2f} KB)",
            webp_lossy_img, f"WebP con p茅rdida: {webp_lossy_size:.2f} KB (diferencia: {-webp_lossy_diff:.2f} KB)"
        ]

with gr.Blocks() as demo:
    gr.Markdown("### Optimizaci贸n de im谩genes para la web")

    image_input = gr.File(label="Sube tu imagen", file_types=['image'])
    optimize_button = gr.Button("Optimizar")

    with gr.Row():
        optimized_output1 = gr.Image(label="Optimizaci贸n sin p茅rdida")
        optimized_size1 = gr.Text()
        
        optimized_output2 = gr.Image(label="Optimizaci贸n con p茅rdida")
        optimized_size2 = gr.Text()

        optimized_output3 = gr.Image(label="Reducci贸n de resoluci贸n")
        optimized_size3 = gr.Text()

        optimized_output4 = gr.Image(label="Optimizaci贸n WebP con p茅rdida")
        optimized_size4 = gr.Text()

    optimize_button.click(
        fn=optimize_image,
        inputs=image_input,
        outputs=[
            optimized_output1, optimized_size1,
            optimized_output2, optimized_size2,
            optimized_output3, optimized_size3,
            optimized_output4, optimized_size4
        ]
    )

demo.launch()