Spaces:
Sleeping
Sleeping
update
Browse files
app.py
CHANGED
@@ -1,44 +1,60 @@
|
|
1 |
import io
|
|
|
2 |
from PIL import Image, ImageOps
|
3 |
import streamlit as st
|
4 |
|
5 |
def remove_metadata(image: Image):
|
6 |
-
# Convertir a modo RGB y eliminar
|
7 |
data = io.BytesIO()
|
8 |
image.save(data, format="JPEG", quality=95, optimize=True)
|
9 |
data.seek(0)
|
10 |
-
return Image.open(data)
|
11 |
|
12 |
def resize_image(image: Image, percentage: float):
|
13 |
# Redimensionar la imagen manteniendo la proporci贸n
|
14 |
width, height = image.size
|
15 |
-
|
16 |
-
|
17 |
-
return
|
|
|
|
|
|
|
|
|
18 |
|
19 |
def main():
|
20 |
-
st.title("
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
26 |
|
27 |
-
st.
|
28 |
|
29 |
-
|
|
|
30 |
|
31 |
-
|
32 |
-
|
33 |
|
34 |
-
|
|
|
35 |
|
36 |
-
#
|
37 |
-
|
38 |
-
|
39 |
-
byte_im = buf.getvalue()
|
40 |
|
41 |
-
|
|
|
|
|
42 |
|
43 |
# Firma personal al final
|
44 |
st.markdown("Hecho en MDQ con amor 鉂わ笍 por Pel谩ez.")
|
|
|
1 |
import io
|
2 |
+
import os
|
3 |
from PIL import Image, ImageOps
|
4 |
import streamlit as st
|
5 |
|
6 |
def remove_metadata(image: Image):
|
7 |
+
# Convertir a modo RGB y eliminar los metadatos
|
8 |
data = io.BytesIO()
|
9 |
image.save(data, format="JPEG", quality=95, optimize=True)
|
10 |
data.seek(0)
|
11 |
+
return Image.open(data), data
|
12 |
|
13 |
def resize_image(image: Image, percentage: float):
|
14 |
# Redimensionar la imagen manteniendo la proporci贸n
|
15 |
width, height = image.size
|
16 |
+
nuevo_tama帽o = (int(width * percentage), int(height * percentage))
|
17 |
+
imagen_redimensionada = image.resize(nuevo_tama帽o, Image.Resampling.LANCZOS) # Usar LANCZOS en lugar de ANTIALIAS
|
18 |
+
return imagen_redimensionada
|
19 |
+
|
20 |
+
def calcular_peso(data):
|
21 |
+
# Calcular el peso en kilobytes
|
22 |
+
return len(data.getvalue()) / 1024
|
23 |
|
24 |
def main():
|
25 |
+
st.title("Redimensionar Imagen y Remover Metadatos")
|
26 |
+
|
27 |
+
archivo_subido = st.file_uploader("Selecciona una imagen...", type=["jpg", "jpeg", "png"])
|
28 |
+
|
29 |
+
if archivo_subido is not None:
|
30 |
+
imagen = Image.open(archivo_subido)
|
31 |
+
|
32 |
+
st.image(imagen, caption="Imagen Original", use_column_width=True)
|
33 |
|
34 |
+
# Mostrar peso de la imagen original
|
35 |
+
buf_original = io.BytesIO()
|
36 |
+
imagen.save(buf_original, format="JPEG")
|
37 |
+
peso_original = calcular_peso(buf_original)
|
38 |
+
st.write(f"Peso de la imagen original: {peso_original:.2f} KB")
|
39 |
|
40 |
+
porcentaje = st.slider("Selecciona el porcentaje de redimensionado", 10, 100, 50)
|
41 |
|
42 |
+
# Redimensionar imagen
|
43 |
+
imagen_redimensionada = resize_image(imagen, porcentaje / 100)
|
44 |
|
45 |
+
# Remover metadatos
|
46 |
+
imagen_sin_metadata, buf_sin_metadata = remove_metadata(imagen_redimensionada)
|
47 |
|
48 |
+
# Mostrar imagen redimensionada sin metadatos
|
49 |
+
st.image(imagen_sin_metadata, caption="Imagen Redimensionada sin Metadatos", use_column_width=True)
|
50 |
|
51 |
+
# Calcular y mostrar el peso de la imagen sin metadatos
|
52 |
+
peso_sin_metadata = calcular_peso(buf_sin_metadata)
|
53 |
+
st.write(f"Peso de la imagen sin metadatos: {peso_sin_metadata:.2f} KB")
|
|
|
54 |
|
55 |
+
# Descargar imagen sin metadatos
|
56 |
+
byte_im = buf_sin_metadata.getvalue()
|
57 |
+
st.download_button(label="Descargar Imagen", data=byte_im, file_name="imagen_redimensionada_sin_metadata.jpg", mime="image/jpeg")
|
58 |
|
59 |
# Firma personal al final
|
60 |
st.markdown("Hecho en MDQ con amor 鉂わ笍 por Pel谩ez.")
|