IMAGENLIT / app.py
Marcepelaez's picture
Update app
2f7f304 verified
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()