Descripción General
RedIMG es una aplicación desarrollada en Python que permite redimensionar y optimizar imágenes por lotes. Está diseñada para procesar múltiples imágenes en una carpeta seleccionada por el usuario, ajustando su tamaño y calidad para cumplir con un límite de tamaño de archivo (700 KB). Además, la aplicación corrige la orientación de las imágenes basándose en sus metadatos EXIF, asegurando que se mantengan en su forma original (vertical u horizontal) después del redimensionamiento.
La aplicación cuenta con una interfaz gráfica desarrollada con la biblioteca tkinter
, que facilita su uso y proporciona retroalimentación visual al usuario mediante una barra de progreso.
Instrucciones de Uso
- Ejecutar la aplicación: Al iniciar la aplicación, se abrirá una ventana con un botón para seleccionar la carpeta que contiene las imágenes.
- Seleccionar la carpeta: Haz clic en el botón "Seleccionar carpeta" y elige la carpeta donde se encuentran las imágenes que deseas redimensionar.
- Procesamiento de imágenes: La aplicación procesará automáticamente todas las imágenes en la carpeta seleccionada. Se mostrará una barra de progreso que indica el avance del proceso.
- Resultados: Las imágenes redimensionadas se guardarán en la misma carpeta con un nombre en el formato:
nombre_carpeta_XXX.jpg
, donde XXX
es un número secuencial. Al finalizar, se mostrará un mensaje indicando si el proceso fue exitoso o si hubo errores.
Procesamiento de Imágenes
El núcleo de la aplicación se enfoca en el procesamiento de imágenes, que incluye las siguientes etapas:
1. Corrección de la Orientación
Algunas imágenes, especialmente las tomadas con dispositivos móviles, pueden tener metadatos EXIF que indican una orientación específica (por ejemplo, rotación de 90 o 180 grados). Si no se manejan correctamente, estas imágenes pueden aparecer rotadas después del redimensionamiento.
El código verifica los metadatos EXIF de cada imagen y corrige su orientación antes de redimensionarla. Esto se realiza mediante la función corregir_orientacion
:
def corregir_orientacion(img):
try:
exif = img._getexif()
if exif is not None:
orientacion = exif.get(274)
if orientacion == 3:
img = img.rotate(180, expand=True)
elif orientacion == 6:
img = img.rotate(270, expand=True)
elif orientacion == 8:
img = img.rotate(90, expand=True)
except Exception:
pass
return img
2. Redimensionamiento de Imágenes
El objetivo es reducir el tamaño de las imágenes para que el lado más largo no supere los 1500 píxeles, manteniendo la proporción original.
ancho, alto = img.size
lado_mayor = max(ancho, alto)
if lado_mayor > 1500:
escala = 1500 / lado_mayor
nuevo_ancho = int(ancho * escala)
nuevo_alto = int(alto * escala)
img = img.resize((nuevo_ancho, nuevo_alto), Image.Resampling.LANCZOS)
3. Ajuste de Calidad
El objetivo es reducir el tamaño del archivo de la imagen para que no supere los 700 KB.
calidad = 95
while True:
img.save(ruta_salida, "JPEG", quality=calidad)
tamaño = os.path.getsize(ruta_salida)
if tamaño <= 700 * 1024: # 700 KB en bytes
break
calidad -= 5
if calidad < 10:
messagebox.showwarning("Advertencia", f"No se pudo reducir el tamaño de '{nombre_salida}' por debajo de 700 KB.")
break
4. Guardado de Imágenes
Las imágenes redimensionadas se guardan en la misma carpeta con un nombre en el formato: nombre_carpeta_XXX.jpg
.
nombre_salida = f"{nombre_carpeta}_{i:03d}.jpg"
ruta_salida = os.path.join(carpeta, nombre_salida)
Interfaz Gráfica
La aplicación cuenta con una interfaz gráfica sencilla que incluye:
- Barra de progreso: Muestra el avance del procesamiento de imágenes.
- Botón de selección: Permite al usuario elegir la carpeta con las imágenes.
- Mensajes informativos: Notifican al usuario sobre el estado del proceso (éxito, errores, advertencias).
Consideraciones Técnicas
- Bibliotecas utilizadas:
- Pillow: Para el procesamiento de imágenes (redimensionamiento, corrección de orientación, guardado).
- tkinter: Para la interfaz gráfica.
- webbrowser: Para abrir enlaces web (opcional).
- Compatibilidad: El código es compatible con los formatos de imagen más comunes: JPG, JPEG, PNG, BMP, GIF y TIFF.
- Requisitos: Es necesario tener instalada la biblioteca
Pillow
(pip install Pillow
).
Conclusión
RedIMG es una herramienta eficaz para redimensionar y optimizar imágenes por lotes, especialmente útil para usuarios que necesitan reducir el tamaño de múltiples imágenes sin perder calidad visual. La corrección automática de la orientación garantiza que las imágenes se mantengan en su forma original, mientras que el ajuste de calidad asegura que los archivos resultantes cumplan con un límite de tamaño específico. La interfaz gráfica hace que el proceso sea intuitivo y accesible para usuarios no técnicos.
Preguntas Frecuentes (FAQ)
1. ¿Qué es RedIMG?
RedIMG es una herramienta diseñada para redimensionar y optimizar imágenes por lotes de manera rápida y eficiente. Para más detalles, consulta la Descripción General.
2. ¿Qué formatos de imagen soporta RedIMG?
RedIMG soporta los siguientes formatos de imagen: JPG, JPEG, PNG, BMP, GIF y TIFF. Para más detalles, consulta la sección de Consideraciones Técnicas.
3. ¿Cómo instalo y ejecuto RedIMG en Windows?
Para instalar y ejecutar RedIMG en Windows, sigue las Instrucciones de Uso.
4. ¿Por qué mi antivirus marca RedIMG como malicioso?
Esto se debe a falsos positivos, que son comunes en aplicaciones compiladas con herramientas como PyInstaller. No hay código malicioso en RedIMG. Para más detalles, consulta la sección ¿Por qué se marcan como inseguros los ejecutables de Python?.
5. ¿Puedo usar RedIMG en macOS o Linux?
RedIMG está diseñado principalmente para Windows, pero puede funcionar en macOS y Linux si tienes Python instalado. Sin embargo, no se ha probado exhaustivamente en estos sistemas.
6. ¿Cómo contribuyo al proyecto?
¡Las contribuciones son bienvenidas! Si deseas mejorar RedIMG, sigue estos pasos:
1. Haz un fork del repositorio.
2. Crea una rama para tu feature (git checkout -b feature/nueva-funcionalidad).
3. Haz commit de tus cambios (git commit -m 'Agrega nueva funcionalidad').
4. Haz push a la rama (git push origin feature/nueva-funcionalidad).
5. Abre un Pull Request.
7. ¿Dónde puedo obtener soporte técnico?
Para soporte técnico, visita la página de soporte:
¿Por qué se marcan como inseguros los ejecutables de Python?
Los ejecutables generados a partir de código Python (por ejemplo, usando herramientas como PyInstaller) a menudo son marcados como inseguros por los antivirus. Esto se debe a varios factores:
- Comportamiento genérico:
- Empaquetar múltiples archivos en un solo ejecutable: PyInstaller combina todos los archivos necesarios (código, bibliotecas, recursos) en un solo ejecutable. Este comportamiento es similar al de algunos tipos de malware.
- Acceder a recursos del sistema: Durante la ejecución, el programa puede cargar bibliotecas dinámicas o acceder a recursos del sistema, lo que los antivirus identifican como sospechoso.
- Crear archivos temporales: Algunas herramientas de empaquetado crean archivos temporales durante la ejecución, lo que también puede ser visto como un comportamiento sospechoso.
- Falta de firma digital:
- Los ejecutables sin firma digital (es decir, no firmados por un desarrollador reconocido) son más propensos a ser marcados como sospechosos. La firma digital ayuda a establecer confianza con los antivirus y los sistemas operativos.
- Uso de bibliotecas externas:
- Si tu aplicación utiliza bibliotecas de terceros, estas pueden incluir código que los antivirus identifican como potencialmente malicioso. Aunque el código sea seguro, la combinación de múltiples bibliotecas puede aumentar las sospechas.
- Herramientas de empaquetado:
- PyInstaller y otras herramientas similares son ampliamente utilizadas por desarrolladores legítimos, pero también son explotadas por creadores de malware para empaquetar código malicioso. Esto hace que los antivirus sean más cautelosos con los ejecutables generados por estas herramientas.
¿Qué hacer si mi antivirus bloquea RedIMG?
1. Agrega una excepción: Configura tu antivirus para excluir la carpeta donde está RedIMG.
2. Usa el código fuente: Si no te sientes cómodo con el ejecutable, puedes ejecutar el código directamente con Python. Para ello:
- Clona el repositorio de GitHub.
- Instala las dependencias con pip install -r requirements.txt
- Ejecuta la aplicación con python main.py