如何用PIL反转图像颜色?

76 投票
7 回答
123581 浏览
提问于 2025-04-15 20:44

我需要把一系列在黑色背景上用白色画的字母图片转换成白色和黑色反转的图片,也就是做成负片效果。请问我该如何使用PIL来实现这个呢?

7 个回答

31

对于任何使用“1”模式处理图像的人来说(也就是1位像素,黑白图像,每个像素用一个字节存储——查看文档),在调用 PIL.ImageOps.invert 之前,你需要先把它转换成“L”模式。

所以:

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

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

可以试试文档中的内容:https://pillow.readthedocs.io/en/stable/reference/ImageOps.html

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(彩色)图像。”

撰写回答