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()