Merlintxu commited on
Commit
51c8f60
1 Parent(s): 216e8c5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -43
app.py CHANGED
@@ -1,61 +1,55 @@
1
  import gradio as gr
2
- from PIL import Image
3
  import os
4
  import tempfile
5
 
6
- def get_image_info(image):
7
- # Obtener el tamaño del archivo en KB
8
- file_size = os.path.getsize(image.name) / 1024 # Convertir a KB
9
-
10
- # Abrir la imagen para mostrarla
11
  img = Image.open(image)
12
 
13
- return img, f"Tamaño del archivo: {file_size:.2f} KB"
14
-
15
- def convert_image_format(image, target_format):
16
  with tempfile.TemporaryDirectory() as tmpdirname:
17
- # Crear una ruta para el archivo de salida en el directorio temporal
18
- output_name = os.path.join(tmpdirname, f"output_image.{target_format.lower()}")
19
-
20
- # Abrir la imagen con PIL
21
- img = Image.open(image)
22
-
23
- # Si el formato es JPG, convertir a RGB si la imagen es RGBA o tiene transparencia
24
- if target_format.lower() == "jpg":
25
- img = img.convert("RGB")
26
-
27
- # Guardar la imagen en el formato deseado
28
- img.save(output_name, format=target_format.upper())
29
-
30
- # Calcular el tamaño del nuevo archivo
31
- file_size = os.path.getsize(output_name) / 1024 # Convertir a KB
32
 
33
- # Volver a abrir la imagen convertida para que Gradio la pueda mostrar
34
- converted_img = Image.open(output_name)
35
-
36
- # Convertir a un formato que Gradio pueda mostrar y manejar adecuadamente
37
- converted_img = converted_img.convert("RGB")
38
-
39
- # Retornar la imagen convertida para visualización en Gradio y su tamaño
40
- return converted_img, f"Tamaño del archivo convertido: {file_size:.2f} KB"
 
 
 
 
 
 
 
 
 
41
 
42
  # Interfaz de Gradio
43
  with gr.Blocks() as demo:
44
- gr.Markdown("### Conversor de formatos de imagen")
45
 
46
  image_input = gr.File(label="Sube tu imagen", file_types=['image'])
47
- format_dropdown = gr.Dropdown(label="Selecciona el formato de salida", choices=["jpg", "png", "webp"], value="webp")
48
- convert_button = gr.Button("Convertir")
 
 
 
49
 
50
- # Mostrar la imagen original y su tamaño
51
- image_output = gr.Image(label="Imagen Original")
52
- size_output = gr.Text(label="Información del Archivo")
53
 
54
- # Mostrar la imagen convertida y su tamaño
55
- converted_image_output = gr.Image(label="Imagen Convertida")
56
- converted_size_output = gr.Text(label="Información del Archivo Convertido")
57
 
58
- image_input.change(fn=get_image_info, inputs=image_input, outputs=[image_output, size_output])
59
- convert_button.click(fn=convert_image_format, inputs=[image_input, format_dropdown], outputs=[converted_image_output, converted_size_output])
60
 
61
  demo.launch()
 
1
  import gradio as gr
2
+ from PIL import Image, ImageOps
3
  import os
4
  import tempfile
5
 
6
+ def optimize_image(image):
7
+ # Leer la imagen original
 
 
 
8
  img = Image.open(image)
9
 
10
+ # Ruta temporal para guardar las imágenes optimizadas
 
 
11
  with tempfile.TemporaryDirectory() as tmpdirname:
12
+ # 1. Compresión sin pérdida
13
+ lossless_output_path = os.path.join(tmpdirname, "lossless.png")
14
+ img.save(lossless_output_path, format="PNG", optimize=True)
15
+ lossless_size = os.path.getsize(lossless_output_path) / 1024 # tamaño en KB
16
+ lossless_img = Image.open(lossless_output_path)
 
 
 
 
 
 
 
 
 
 
17
 
18
+ # 2. Compresión con pérdida (reducción de calidad)
19
+ lossy_output_path = os.path.join(tmpdirname, "lossy.jpg")
20
+ img.save(lossy_output_path, format="JPEG", quality=50, optimize=True)
21
+ lossy_size = os.path.getsize(lossy_output_path) / 1024 # tamaño en KB
22
+ lossy_img = Image.open(lossy_output_path)
23
+
24
+ # 3. Reducción de resolución
25
+ reduced_output_path = os.path.join(tmpdirname, "reduced_resolution.jpg")
26
+ reduced_img = img.resize((img.width // 2, img.height // 2), Image.ANTIALIAS)
27
+ reduced_img.save(reduced_output_path, format="JPEG", quality=85, optimize=True)
28
+ reduced_size = os.path.getsize(reduced_output_path) / 1024 # tamaño en KB
29
+ reduced_img = Image.open(reduced_output_path)
30
+
31
+ # Retornar imágenes optimizadas y sus tamaños
32
+ return (lossless_img, f"Sin pérdida: {lossless_size:.2f} KB",
33
+ lossy_img, f"Con pérdida: {lossy_size:.2f} KB",
34
+ reduced_img, f"Reducción de resolución: {reduced_size:.2f} KB")
35
 
36
  # Interfaz de Gradio
37
  with gr.Blocks() as demo:
38
+ gr.Markdown("### Optimización de imágenes para la web")
39
 
40
  image_input = gr.File(label="Sube tu imagen", file_types=['image'])
41
+ optimize_button = gr.Button("Optimizar")
42
+
43
+ # Mostrar las imágenes optimizadas y sus tamaños
44
+ optimized_output1 = gr.Image(label="Optimización sin pérdida")
45
+ optimized_size1 = gr.Text(label="Tamaño del archivo sin pérdida")
46
 
47
+ optimized_output2 = gr.Image(label="Optimización con pérdida")
48
+ optimized_size2 = gr.Text(label="Tamaño del archivo con pérdida")
 
49
 
50
+ optimized_output3 = gr.Image(label="Reducción de resolución")
51
+ optimized_size3 = gr.Text(label="Tamaño del archivo con reducción de resolución")
 
52
 
53
+ optimize_button.click(fn=optimize_image, inputs=image_input, outputs=[optimized_output1, optimized_size1, optimized_output2, optimized_size2, optimized_output3, optimized_size3])
 
54
 
55
  demo.launch()