Pillow es una super libreria para el trabajo con imagenes en python que a su vez es un fork de otra super libreria llamada PIL.
Hace varios dias tenia que descargar / generar al rededor de 80 iconos de un color en particular estos, resulta que dicho color no era el que necesitaba :/ y tenia que cambiar estas 80 imagenes o descargarlas nuevamente, algo que no iba a pasar, pero bueno soy programador y pos recorde esta libreria Pillow :).
Instalacion
pip install Pillow
Pillow y PIL no pueden estar instalados en el mismo entorno, asi que a desinstalar PIL en caso de tenerla instalada.
Ahora como cambiar el color de un pixel usando Pillow
from PIL import Image imagen = Image.load('imagen.jpg') pixeles = im.load() pixeles[0,0] = (33,150,243) imagen.save("nueva_imagen.jpg")
De esta forma se cambia un el color a un pixel usando pillow y python.
Bueno, el caso de uso que me toco solucionar fue cambiar el color del icono y como estos eran iconos de un solo color, solo tenia que identificar el color en el píxel y si era el color que quería cambiar pues lo cambiaría. Bueno aquí mi solución.
#Ambos colores son colores aleatorios color_actual = (33,150,243) color_nuevo = (0,172,193) icono = Image.open('icono.png') icono = im.convert("RGBA") pixels = im.load() width, height = icono.size for x in range(width): for y in range(height): r, g, b, a = pixels[x, y] if (r, g, b) == color_actual: pixels[x, y] = (color_nuevo[0], color_nuevo[1], color_nuevo[2], a) icono.save("icono_nuevo_color.png")
Esta es una solución bien basica y funciona, pero puede ser mejor como todo en la vida, esta nueva solución mejorada utiliza la potencia de Numpy para trabajar con arreglos.
import Image import numpy as np color_nuevo = (0,172,193) color_actual = (33,150,243) icono = Image.open('icono.png') icono = im.convert("RGBA") data = np.array(icono) data[(data == color_actual).all(axis = -1)] = color_nuevo icono_nuevo = Image.fromarray(data, 'RGBA') icono_nuevo.save('nuevo_icono.png')
Esta solución la encontre en StackOverflow
Espero que este tutorial le sea de ayuda a mas de uno. 🙂