Spaces:
Running
Running
Update app.py
Browse files
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
|
7 |
-
#
|
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 |
-
|
14 |
-
|
15 |
-
def convert_image_format(image, target_format):
|
16 |
with tempfile.TemporaryDirectory() as tmpdirname:
|
17 |
-
#
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
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 |
-
#
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
#
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
# Interfaz de Gradio
|
43 |
with gr.Blocks() as demo:
|
44 |
-
gr.Markdown("###
|
45 |
|
46 |
image_input = gr.File(label="Sube tu imagen", file_types=['image'])
|
47 |
-
|
48 |
-
|
|
|
|
|
|
|
49 |
|
50 |
-
|
51 |
-
|
52 |
-
size_output = gr.Text(label="Información del Archivo")
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
converted_size_output = gr.Text(label="Información del Archivo Convertido")
|
57 |
|
58 |
-
|
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()
|