You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python 3的Pillow(PIL)库实现图像颜色反转的方法是什么?

PIL实现图像颜色反转操作指南

实现原理

8位深度彩色图像的每个RGB通道取值范围为0-255,颜色反转本质是将每个通道的取值映射到区间的对立位置,即新通道值 = 255 - 原通道值,即可得到色谱对立的视觉效果。

具体实现代码

方案1:调用封装好的API(最简实现)

直接使用PIL的ImageOps.invert()方法完成反转,适合不需要自定义映射规则的场景:

from PIL import Image, ImageOps

# 读取原始图像
original_img = Image.open("tree_frog.jpg")
# 统一转为RGB模式,避免透明通道/灰度模式处理异常
original_img = original_img.convert("RGB")
# 执行颜色反转
inverted_img = ImageOps.invert(original_img)
# 保存结果
inverted_img.save("inverted_tree_frog.jpg")

方案2:手动遍历像素实现(高自由度)

如果后续需要针对你的物理项目调整映射规则,可以手动处理每个像素的通道值:

from PIL import Image

original_img = Image.open("tree_frog.jpg").convert("RGB")
width, height = original_img.size

# 逐像素处理
for x in range(width):
    for y in range(height):
        r, g, b = original_img.getpixel((x, y))
        # 自定义反转逻辑,可按需修改
        inverted_r = 255 - r
        inverted_g = 255 - g
        inverted_b = 255 - b
        original_img.putpixel((x, y), (inverted_r, inverted_g, inverted_b))

original_img.save("inverted_tree_frog.jpg")

常见问题说明

  • 若处理带透明通道的RGBA图像,不想修改透明值的话,读取像素时单独保留alpha通道原值即可:r, g, b, a = original_img.getpixel((x,y)),写入时拼接为(inverted_r, inverted_g, inverted_b, a)
  • 非8位深度的特殊图像需先获取当前图像的像素最大值,替换公式中的255完成计算
  • 如需实现局部色域的定向映射而非全通道反转,直接修改对应通道的计算规则即可适配你的项目需求

内容的提问来源于stack exchange,提问作者newguy69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:36:02