2010-03-23 129 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')