2010-08-29 5 views

risposta

20

Per basarsi sull'esempio di Gabi Purcaru link, ecco qualcosa di accartocciato dallo PIL docs.

Il modo più semplice per modificare in modo affidabile un singolo pixel utilizza PIL sarebbe:

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") 

che funzionerà in PIL 1.1.6 e superiori. Se si ha la sfortuna di dover supportare una versione precedente, è possibile sacrificare le prestazioni e sostituire pix[x, y] = value con im.putpixel((x, y), value).

+5

+1 per 'NotImplementedError' – heltonbiker