如何用PIL(Python成像)反转图像的颜色?

时间:2010-03-23 09:54:25

标签: python python-imaging-library

我需要将在黑色背景字母上绘制为白色的一系列图像转换为白色和黑色被反转的图像(作为负片)。如何使用PIL实现这一目标?

5 个答案:

答案 0 :(得分:62)

从文档中尝试以下内容: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图像。”

答案 1 :(得分:24)

如果图像是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')

答案 2 :(得分:16)

对于使用" 1"模式(即,1位像素,黑色和白色,每个字节存储一个像素 - see docs),您需要将其转换为" L"调用PIL.ImageOps.invert之前的模式。

因此:

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

答案 3 :(得分:0)

如果有人正在反转CMYK图像,PIL和Pillow的当前实现似乎不支持此并抛出错误。但是,您可以通过使用这个方便的功能(基本上是Greg Sadetsky上面的帖子的扩展)反转图像的各个波段来轻松解决这个问题:

def CMYKInvert(img) :
    return Image.merge(img.mode, [ImageOps.invert(b.convert('L')) for b in img.split()])

答案 4 :(得分:-1)

from PIL import Image

img = Image.open("archive.extension") 

pixels = img.load()

for i in range(img.size[0]):
    for j in range(img.size[1]):
        x,y,z = pixels[i,j][0],pixels[i,j][1],pixels[i,j][2]
        x,y,z = abs(x-255), abs(y-255), abs(z-255)
        pixels[i,j] = (x,y,z)

img.show()

`