Merlintxu commited on
Commit
e3671eb
·
verified ·
1 Parent(s): 3ef5903

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -33
app.py CHANGED
@@ -4,74 +4,71 @@ import os
4
  import tempfile
5
 
6
  def optimize_image(image):
7
- # Leer la imagen original
8
  img = Image.open(image)
9
 
10
- # Calcular el tamaño del archivo original
11
  original_size = os.path.getsize(image.name) / 1024 # tamaño en KB
12
 
13
- # Ruta temporal para guardar las imágenes optimizadas
14
  with tempfile.TemporaryDirectory() as tmpdirname:
15
- # 1. Compresión sin pérdida
16
  lossless_output_path = os.path.join(tmpdirname, "lossless.png")
17
  img.save(lossless_output_path, format="PNG", optimize=True)
18
- lossless_size = os.path.getsize(lossless_output_path) / 1024 # tamaño en KB
19
  lossless_img = Image.open(lossless_output_path)
20
  lossless_diff = original_size - lossless_size
21
 
22
- # 2. Compresión con pérdida (reducción de calidad)
23
  lossy_output_path = os.path.join(tmpdirname, "lossy.jpg")
24
  img.save(lossy_output_path, format="JPEG", quality=50, optimize=True)
25
- lossy_size = os.path.getsize(lossy_output_path) / 1024 # tamaño en KB
26
  lossy_img = Image.open(lossy_output_path)
27
  lossy_diff = original_size - lossy_size
28
 
29
- # 3. Reducción de resolución
30
  reduced_output_path = os.path.join(tmpdirname, "reduced_resolution.jpg")
31
  reduced_img = img.resize((img.width // 2, img.height // 2), Image.LANCZOS)
32
  reduced_img.save(reduced_output_path, format="JPEG", quality=85, optimize=True)
33
- reduced_size = os.path.getsize(reduced_output_path) / 1024 # tamaño en KB
34
  reduced_img = Image.open(reduced_output_path)
35
  reduced_diff = original_size - reduced_size
36
 
37
- # 4. Compresión con WebP (con pérdida)
38
  webp_lossy_output_path = os.path.join(tmpdirname, "lossy.webp")
39
  img.save(webp_lossy_output_path, format="WEBP", quality=50, optimize=True)
40
- webp_lossy_size = os.path.getsize(webp_lossy_output_path) / 1024 # tamaño en KB
41
  webp_lossy_img = Image.open(webp_lossy_output_path)
42
  webp_lossy_diff = original_size - webp_lossy_size
43
 
44
- # Retornar imágenes optimizadas y sus tamaños con la diferencia
45
- return (lossless_img, f"Sin pérdida: {lossless_size:.2f} KB (diferencia: {-lossless_diff:.2f} KB)",
46
- lossy_img, f"Con pérdida: {lossy_size:.2f} KB (diferencia: {-lossy_diff:.2f} KB)",
47
- reduced_img, f"Reducción de resolución: {reduced_size:.2f} KB (diferencia: {-reduced_diff:.2f} KB)",
48
- webp_lossy_img, f"WebP con pérdida: {webp_lossy_size:.2f} KB (diferencia: {-webp_lossy_diff:.2f} KB)")
 
49
 
50
- # Interfaz de Gradio
51
  with gr.Blocks() as demo:
52
  gr.Markdown("### Optimización de imágenes para la web")
53
 
54
  image_input = gr.File(label="Sube tu imagen", file_types=['image'])
55
  optimize_button = gr.Button("Optimizar")
56
 
57
- # Mostrar las imágenes optimizadas y sus tamaños
58
- optimized_output1 = gr.Image(label="Optimización sin pérdida")
59
- optimized_size1 = gr.Text(label="Tamaño del archivo sin pérdida")
60
-
61
- optimized_output2 = gr.Image(label="Optimización con pérdida")
62
- optimized_size2 = gr.Text(label="Tamaño del archivo con pérdida")
63
 
64
- optimized_output3 = gr.Image(label="Reducción de resolución")
65
- optimized_size3 = gr.Text(label="Tamaño del archivo con reducción de resolución")
66
 
67
- optimized_output4 = gr.Image(label="Optimización WebP con pérdida")
68
- optimized_size4 = gr.Text(label="Tamaño del archivo WebP con pérdida")
69
 
70
- optimize_button.click(fn=optimize_image, inputs=image_input, outputs=[
71
- optimized_output1, optimized_size1,
72
- optimized_output2, optimized_size2,
73
- optimized_output3, optimized_size3,
74
- optimized_output4, optimized_size4
75
- ])
 
 
 
 
76
 
77
  demo.launch()
 
4
  import tempfile
5
 
6
  def optimize_image(image):
 
7
  img = Image.open(image)
8
 
 
9
  original_size = os.path.getsize(image.name) / 1024 # tamaño en KB
10
 
 
11
  with tempfile.TemporaryDirectory() as tmpdirname:
 
12
  lossless_output_path = os.path.join(tmpdirname, "lossless.png")
13
  img.save(lossless_output_path, format="PNG", optimize=True)
14
+ lossless_size = os.path.getsize(lossless_output_path) / 1024
15
  lossless_img = Image.open(lossless_output_path)
16
  lossless_diff = original_size - lossless_size
17
 
 
18
  lossy_output_path = os.path.join(tmpdirname, "lossy.jpg")
19
  img.save(lossy_output_path, format="JPEG", quality=50, optimize=True)
20
+ lossy_size = os.path.getsize(lossy_output_path) / 1024
21
  lossy_img = Image.open(lossy_output_path)
22
  lossy_diff = original_size - lossy_size
23
 
 
24
  reduced_output_path = os.path.join(tmpdirname, "reduced_resolution.jpg")
25
  reduced_img = img.resize((img.width // 2, img.height // 2), Image.LANCZOS)
26
  reduced_img.save(reduced_output_path, format="JPEG", quality=85, optimize=True)
27
+ reduced_size = os.path.getsize(reduced_output_path) / 1024
28
  reduced_img = Image.open(reduced_output_path)
29
  reduced_diff = original_size - reduced_size
30
 
 
31
  webp_lossy_output_path = os.path.join(tmpdirname, "lossy.webp")
32
  img.save(webp_lossy_output_path, format="WEBP", quality=50, optimize=True)
33
+ webp_lossy_size = os.path.getsize(webp_lossy_output_path) / 1024
34
  webp_lossy_img = Image.open(webp_lossy_output_path)
35
  webp_lossy_diff = original_size - webp_lossy_size
36
 
37
+ return [
38
+ lossless_img, f"Sin pérdida: {lossless_size:.2f} KB (diferencia: {-lossless_diff:.2f} KB)",
39
+ lossy_img, f"Con pérdida: {lossy_size:.2f} KB (diferencia: {-lossy_diff:.2f} KB)",
40
+ reduced_img, f"Reducción de resolución: {reduced_size:.2f} KB (diferencia: {-reduced_diff:.2f} KB)",
41
+ webp_lossy_img, f"WebP con pérdida: {webp_lossy_size:.2f} KB (diferencia: {-webp_lossy_diff:.2f} KB)"
42
+ ]
43
 
 
44
  with gr.Blocks() as demo:
45
  gr.Markdown("### Optimización de imágenes para la web")
46
 
47
  image_input = gr.File(label="Sube tu imagen", file_types=['image'])
48
  optimize_button = gr.Button("Optimizar")
49
 
50
+ with gr.Row():
51
+ optimized_output1 = gr.Image(label="Optimización sin pérdida")
52
+ optimized_size1 = gr.Text()
53
+
54
+ optimized_output2 = gr.Image(label="Optimización con pérdida")
55
+ optimized_size2 = gr.Text()
56
 
57
+ optimized_output3 = gr.Image(label="Reducción de resolución")
58
+ optimized_size3 = gr.Text()
59
 
60
+ optimized_output4 = gr.Image(label="Optimización WebP con pérdida")
61
+ optimized_size4 = gr.Text()
62
 
63
+ optimize_button.click(
64
+ fn=optimize_image,
65
+ inputs=image_input,
66
+ outputs=[
67
+ optimized_output1, optimized_size1,
68
+ optimized_output2, optimized_size2,
69
+ optimized_output3, optimized_size3,
70
+ optimized_output4, optimized_size4
71
+ ]
72
+ )
73
 
74
  demo.launch()