Si numpy
está disponible en su máquina, trate de hacer algo como:
import numpy as np
from PIL import Image
im = Image.open('fig1.png')
data = np.array(im)
r1, g1, b1 = 0, 0, 0 # Original value
r2, g2, b2 = 255, 255, 255 # Value that we want to replace it with
red, green, blue = data[:,:,0], data[:,:,1], data[:,:,2]
mask = (red == r1) & (green == g1) & (blue == b1)
data[:,:,:3][mask] = [r2, g2, b2]
im = Image.fromarray(data)
im.save('fig1_modified.png')
Utilizará un poco (3x) más memoria, pero debe ser considerablemente (~ 5x, pero más para imágenes más grandes) Más rápido.
También tenga en cuenta que el código anterior es un poco más complicado de lo que debería ser si solo tiene imágenes RGB (y no RGBA). Sin embargo, este ejemplo dejará la banda alfa sola, mientras que una versión más simple no tendría.
Probablemente no hace una diferencia de velocidad prudente, pero se puede hacer 'pix [x, y] = mycolor2' en lugar de utilizar' im.putpixel() '. – zeekay
Intenté esto, pero me sale un error debido al modo ('r') en el que abrí la Imagen. Intenté 'Image.open (" MyImage.png "," w ")', pero no funciona. No tengo idea de cómo podría usar 'pix [x, y] = mycolor2' –
no estoy seguro de por qué no funcionaría, quizás un error? – zeekay