2010-08-29 10 views

Répondre

20

Pour construire sur l'exemple donné dans link de Gabi Purcaru, voici quelque chose bricolé à partir du PIL docs.

La façon la plus simple pour modifier de manière fiable un seul pixel en utilisant PIL serait:

x, y = 10, 25 
shade = 20 

from PIL import Image 
im = Image.open("foo.png") 
pix = im.load() 

if im.mode == '1': 
    value = int(shade >= 127) # Black-and-white (1-bit) 
elif im.mode == 'L': 
    value = shade # Grayscale (Luminosity) 
elif im.mode == 'RGB': 
    value = (shade, shade, shade) 
elif im.mode == 'RGBA': 
    value = (shade, shade, shade, 255) 
elif im.mode == 'P': 
    raise NotImplementedError("TODO: Look up nearest color in palette") 
else: 
    raise ValueError("Unexpected mode for PNG image: %s" % im.mode) 

pix[x, y] = value 

im.save("foo_new.png") 

qui fonctionnera dans PIL 1.1.6 et plus. Si vous avez la malchance de devoir supporter une ancienne version, vous pouvez sacrifier les performances et remplacer pix[x, y] = value par im.putpixel((x, y), value).

+5

+1 pour 'NotImplementedError' – heltonbiker