2010-03-23 216 views

Respuesta

47

Pruebe lo siguiente de los documentos: http://effbot.org/imagingbook/imageops.htm

from PIL import Image 
import PIL.ImageOps  

image = Image.open('your_image.png') 

inverted_image = PIL.ImageOps.invert(image) 

inverted_image.save('new_name.png') 

Nota: "El módulo ImageOps contiene una serie de operaciones de procesamiento de imágenes 'ready-made' Este módulo es algo experimental, y la mayoría de los operadores sólo trabajar. Imágenes L y RGB ".

+0

Oh, parece que he perdido ese módulo. Gracias. – bialix

15

Si la imagen es transparente RGBA esta fallará ... Esto debería funcionar sin embargo:

from PIL import Image 
import PIL.ImageOps  

image = Image.open('your_image.png') 
if image.mode == 'RGBA': 
    r,g,b,a = image.split() 
    rgb_image = Image.merge('RGB', (r,g,b)) 

    inverted_image = PIL.ImageOps.invert(rgb_image) 

    r2,g2,b2 = inverted_image.split() 

    final_transparent_image = Image.merge('RGBA', (r2,g2,b2,a)) 

    final_transparent_image.save('new_file.png') 

else: 
    inverted_image = PIL.ImageOps.invert(image) 
    inverted_image.save('new_name.png') 
8

para cualquiera que trabaje con una imagen en el modo de "1" (es decir, los píxeles de 1 bit, blanco y negro , almacenado con un píxel por byte - see docs), debe convertirlo al modo "L" antes de llamar al PIL.ImageOps.invert.

Por lo tanto:

im = im.convert('L') 
im = ImageOps.invert(im) 
im = im.convert('1') 
Cuestiones relacionadas