File size: 2,885 Bytes
4136906
 
 
 
 
ece9fff
4136906
 
 
ece9fff
4136906
 
 
 
ece9fff
2f7f304
ece9fff
 
 
 
 
4136906
 
ece9fff
 
 
 
 
 
 
2f7f304
ece9fff
2f7f304
 
4136906
ece9fff
 
 
 
4136906
2f7f304
ece9fff
4136906
ece9fff
 
4136906
2f7f304
 
 
 
 
ece9fff
 
4136906
ece9fff
 
4136906
ece9fff
 
 
4136906
ece9fff
 
 
4136906
d17d91d
 
 
e9eb131
4136906
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
import io
from PIL import Image, ImageOps
import streamlit as st

def remove_metadata(image: Image):
    # Convertir a modo RGB y eliminar los metadatos
    data = io.BytesIO()
    image.save(data, format="JPEG", quality=95, optimize=True)
    data.seek(0)
    return Image.open(data), data

def resize_image(image: Image, percentage: float):
    # Redimensionar la imagen manteniendo la proporción
    width, height = image.size
    nuevo_tamaño = (int(width * percentage), int(height * percentage))
    imagen_redimensionada = image.resize(nuevo_tamaño, Image.Resampling.LANCZOS)
    return imagen_redimensionada

def calcular_peso(data):
    # Calcular el peso en kilobytes
    return len(data.getvalue()) / 1024

def main():
    st.title("Redimensionar Imagen y Remover Metadatos")

    archivo_subido = st.file_uploader("Selecciona una imagen...", type=["jpg", "jpeg", "png"])

    if archivo_subido is not None:
        imagen = Image.open(archivo_subido)

        # Mostrar tamaño y peso de la imagen original
        st.image(imagen, caption="Imagen Original", use_column_width=True)
        ancho_original, alto_original = imagen.size
        st.write(f"Tamaño de la imagen original: {ancho_original} x {alto_original} píxeles")

        buf_original = io.BytesIO()
        imagen.save(buf_original, format="JPEG")
        peso_original = calcular_peso(buf_original)
        st.write(f"Peso de la imagen original: {peso_original:.2f} KB")

        # Seleccionar porcentaje de redimensionado
        porcentaje = st.slider("Selecciona el porcentaje de redimensionado", 10, 100, 50)

        # Redimensionar imagen
        imagen_redimensionada = resize_image(imagen, porcentaje / 100)

        # Mostrar tamaño de la imagen redimensionada
        ancho_redimensionado, alto_redimensionado = imagen_redimensionada.size
        st.image(imagen_redimensionada, caption="Imagen Redimensionada", use_column_width=True)
        st.write(f"Tamaño de la imagen redimensionada: {ancho_redimensionado} x {alto_redimensionado} píxeles")

        # Remover metadatos
        imagen_sin_metadata, buf_sin_metadata = remove_metadata(imagen_redimensionada)

        # Mostrar imagen redimensionada sin metadatos
        st.image(imagen_sin_metadata, caption="Imagen Redimensionada sin Metadatos", use_column_width=True)

        # Calcular y mostrar el peso de la imagen sin metadatos
        peso_sin_metadata = calcular_peso(buf_sin_metadata)
        st.write(f"Peso de la imagen sin metadatos: {peso_sin_metadata:.2f} KB")

        # Descargar imagen sin metadatos
        byte_im = buf_sin_metadata.getvalue()
        st.download_button(label="Descargar Imagen", data=byte_im, file_name="imagen_redimensionada_sin_metadata.jpg", mime="image/jpeg")

    # Firma personal al final
    st.markdown("Hecho en MDQ con amor ❤️ por Peláez.")

if __name__ == "__main__":
    main()