En este artículo te explicaré paso a paso cómo crear un script en Python que recorra todos los archivos JPG en un directorio, los convierta a formato PNG y elimine el fondo blanco, reemplazándolo por transparencia. Esta solución puede ser muy útil si trabajas con imágenes que requieren fondo transparente para diseños web o proyectos gráficos.
¿Qué hace este script?
El script realiza las siguientes tareas:
- Recorre el directorio: Busca archivos con extensión
.jpg
o.JPG
en el directorio donde se ejecute. - Conversión a PNG: Abre cada imagen, la procesa para eliminar el fondo blanco y la guarda en formato PNG.
- Eliminación del fondo blanco: Convierte la imagen a modo RGBA (para trabajar con transparencia) y modifica cada píxel que tenga valores de color altos (casi blancos) para que se hagan transparentes.
Además, se incluye un modo de depuración que muestra mensajes en la consola para confirmar el procesamiento de cada imagen.
Código en Python
Puedes copiar y pegar el siguiente código en un archivo, por ejemplo procesar_imagenes.py
, y ejecutarlo en el directorio donde se encuentren tus imágenes JPG.
import os
import glob
from PIL import Image
def eliminar_fondo_blanco(imagen, umbral=240):
"""
Convierte la imagen a RGBA y, para cada píxel que sea casi blanco,
lo hace transparente.
"""
imagen = imagen.convert("RGBA")
datos = imagen.getdata()
nuevos_datos = []
for item in datos:
# Si los componentes R, G y B son mayores o iguales al umbral,
# se considera que el píxel es blanco o casi blanco.
if item[0] >= umbral and item[1] >= umbral and item[2] >= umbral:
nuevos_datos.append((255, 255, 255, 0))
else:
nuevos_datos.append(item)
imagen.putdata(nuevos_datos)
return imagen
def procesar_imagenes(directorio):
print(f"Directorio actual: {os.path.abspath(directorio)}")
archivos = glob.glob(os.path.join(directorio, "*.jpg")) + glob.glob(os.path.join(directorio, "*.JPG"))
if not archivos:
print("No se encontraron archivos JPG en el directorio.")
return
for ruta in archivos:
print(f"Procesando archivo: {ruta}")
try:
with Image.open(ruta) as img:
img_procesada = eliminar_fondo_blanco(img)
# Se guarda con el mismo nombre pero con extensión .png
nombre_base = os.path.splitext(ruta)[0]
ruta_png = nombre_base + ".png"
img_procesada.save(ruta_png, "PNG")
print(f"Procesado correctamente: {ruta} -> {ruta_png}")
except Exception as e:
print(f"Error al procesar {ruta}: {e}")
if __name__ == "__main__":
procesar_imagenes(".")
Explicación del código
- Función
eliminar_fondo_blanco
:
Esta función recibe una imagen y la convierte al modo RGBA para trabajar con la transparencia. Luego, recorre cada píxel y, si sus valores R, G y B son mayores o iguales a un umbral (por defecto 240), reemplaza ese píxel por uno completamente transparente. - Función
procesar_imagenes
:
Utiliza la libreríaglob
para buscar todos los archivos con extensión.jpg
o.JPG
en el directorio indicado. Si no encuentra ningún archivo, muestra un mensaje. Para cada archivo encontrado, abre la imagen, procesa el fondo y la guarda en formato PNG con el mismo nombre base. - Bloque Principal:
El script se ejecuta en el directorio actual (representado por"."
). Puedes modificar este valor para apuntar a otra carpeta si es necesario.
Cómo usar el script
- Instalar Pillow:
Asegúrate de tener instalada la librería Pillow, la cual se utiliza para el manejo de imágenes. Puedes instalarla con el siguiente comando:pip install pillow
- Ubicar tus imágenes:
Coloca el script en el directorio donde se encuentren las imágenes JPG o modifica la ruta en la funciónprocesar_imagenes
según sea necesario. - Ejecutar el script:
Abre la terminal en el directorio del script y ejecuta:python procesar_imagenes.py
El script imprimirá mensajes en la consola indicando el directorio actual, los archivos que está procesando y si se han generado los archivos PNG correctamente.
Conclusión
Este script es una solución sencilla y efectiva para automatizar la conversión de imágenes y la eliminación del fondo blanco en tus archivos JPG. Puedes ajustar el umbral en la función eliminar_fondo_blanco
según tus necesidades para optimizar la detección del fondo blanco.
¡Espero que este artículo te sea de utilidad en tu proyecto y facilite tu flujo de trabajo con imágenes!
Si tienes dudas o necesitas más personalizaciones, no dudes en dejar un comentario o contactar para más detalles.
