2010-03-23 71 views

回答

47

尝试从文档如下: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') 

注:“ImageOps模块包含了一些‘现成的’图像处理操作,该模块是有点实验性的,大多数运营商只有努力。 L和RGB图像。“

+0

呵呵,看来我已经错过了该模块。谢谢。 – bialix 2010-03-23 13:33:34

15

如果图像是RGBA透明,这将失败...这应该工作,虽然:

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

对于任何人在“1”模式下的图像加工(即1位像素,黑色和白色,每字节一个像素存储 - see docs),则在调用PIL.ImageOps.invert之前,需要将其转换为“L”模式。

这样:

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