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

如何使用Python Pillow替换图片颜色并支持直接传入HEX色值?

实现方法

你可以直接用Pillow内置的ImageColor.getrgb()方法将HEX十六进制色值直接转换为Pillow可识别的RGB元组,无需手动解析色值。

具体改造步骤

  1. 导入ImageColor模块
  2. 提前定义要替换的原颜色、目标HEX色值,转换为RGB格式
  3. 替换原有代码里写死的RGB数值即可

改造后完整代码

from PIL import Image, ImageColor
import numpy as np

# 定义颜色映射:key为原RGB颜色,value为目标HEX色值
color_map = {
    (0, 0, 0): "#FFFF00",  # 黑色替换为黄色
    (255, 255, 255): "#FF0000"  # 白色替换为红色
}

# 提前把HEX转成RGB元组
converted_map = {k: ImageColor.getrgb(v) for k, v in color_map.items()}

img = Image.open("TbnlF.png")
width, height = img.size

for i in range(width):
    for j in range(height):
        current_rgb = img.getpixel((i, j))[:3]  # 忽略可能存在的alpha通道
        if current_rgb in converted_map:
            img.putpixel((i, j), converted_map[current_rgb])

img.save("changed.png")

手动解析HEX的可选方案

如果你不想额外导入模块,也可以自己写简单的转换逻辑处理HEX色值:

def hex_to_rgb(hex_str):
    # 去除#号前缀
    hex_str = hex_str.lstrip('#')
    # 每两位转成16进制整数,返回RGB元组
    return tuple(int(hex_str[i:i+2], 16) for i in (0, 2, 4))

# 调用示例:hex_to_rgb("#FF0000") 会返回(255, 0, 0)

更高效率的优化方案(适合大尺寸图片)

你已经导入了numpy,可以用向量化操作替代双重循环,处理速度提升非常明显:

from PIL import Image, ImageColor
import numpy as np

color_map = {
    (0, 0, 0): "#FFFF00",
    (255, 255, 255): "#FF0000"
}
converted_map = {k: ImageColor.getrgb(v) for k, v in color_map.items()}

img = Image.open("TbnlF.png")
img_arr = np.array(img)

for old_rgb, new_rgb in converted_map.items():
    # 匹配所有和原颜色一致的像素,批量替换
    mask = np.all(img_arr[..., :3] == old_rgb, axis=-1)
    img_arr[mask] = new_rgb

Image.fromarray(img_arr).save("changed.png")

内容的提问来源于stack exchange,提问作者project.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:54:01