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

如何使用PIL实现两调色板颜色全组合并替换目标图片对应颜色

实现方案

步骤说明

  • 先编写十六进制颜色码转RGB元组的工具函数,适配图片数值处理要求
  • 遍历红色系调色板和黄色系调色板的全量两两组合
  • 对每组颜色组合,复制原始图片数组,将对应红色像素全部替换为目标黄色像素
  • 转换数组回图片对象,按照颜色组合名称命名保存

完整可运行代码

from PIL import Image
import numpy as np
from itertools import product

# 十六进制颜色转RGB元组工具函数
def hex_to_rgb(hex_str):
    hex_str = hex_str.lstrip('#')
    return tuple(int(hex_str[i:i+2], 16) for i in (0, 2, 4))

# 读取原始图片
im = Image.open('AGXCL.jpg')
imnp = np.array(im)

webhexred = {
    "lightsalmon" : "#FFA07A",
    "salmon" :"#FA8072",
    "darksalmon" : "#E9967A",
    "lightcoral" : "#F08080"
}
webhexyel = {
    "goldenrod" : "#DAA520",
    "gold": "#FFD700",
    "orange" : "#FFA500",
    "darkorange" : "#FF8C00"
}

# 预转换所有调色板颜色为RGB格式
red_rgb_map = {name: hex_to_rgb(hex_code) for name, hex_code in webhexred.items()}
yel_rgb_map = {name: hex_to_rgb(hex_code) for name, hex_code in webhexyel.items()}

# 遍历所有颜色两两组合
for (red_name, red_rgb), (yel_name, yel_rgb) in product(red_rgb_map.items(), yel_rgb_map.items()):
    # 复制原始数组避免修改原数据
    temp_np = imnp.copy()
    # 匹配所有对应红色像素并替换为目标黄色
    mask = (temp_np == red_rgb).all(axis=-1)
    temp_np[mask] = yel_rgb
    # 生成图片并按命名规则保存
    output = Image.fromarray(temp_np)
    output.save(f"{red_name}_{yel_name}.png")

注意事项

  • 当前代码为精确匹配颜色替换,如果需要模糊匹配相近颜色,可以调整mask判断逻辑,改为计算颜色空间距离小于阈值即判定为匹配
  • 如果处理的是带透明通道的RGBA格式图片,需要修改十六进制转码逻辑和mask判断逻辑,适配alpha通道处理
  • 运行前请确认AGXCL.jpg和代码放在同一目录,也可以修改Image.open内的路径为图片的绝对路径

内容的提问来源于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 06:48:03