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

GIMP:Python脚本中如何获取选区内部的代表性采样点

在Python-Fu中获取模糊选区的代表性颜色值

一、优先获取用户触发模糊选择的点击像素颜色

模糊选择(如魔棒工具)由用户点击特定像素触发,GIMP会记录该点击坐标,可直接通过上下文API获取,再调用pdb.gimp_image_pick_color取色,这是最贴合需求的方案。

代码示例

# 获取当前活动图像与图层
image = pdb.gimp_image_get_active()
drawable = pdb.gimp_image_get_active_drawable(image)

# 获取用户最后一次点击的坐标(即模糊选择的触发点)
click_x = pdb.gimp_context_get_last_x()
click_y = pdb.gimp_context_get_last_y()

# 校验坐标是否在图像范围内
img_width = pdb.gimp_image_get_width(image)
img_height = pdb.gimp_image_get_height(image)
if 0 <= click_x < img_width and 0 <= click_y < img_height:
    # 拾取单个像素颜色:参数依次为图像、图层、X、Y、是否采样周围、是否取平均、采样半径
    success, r, g, b, a = pdb.gimp_image_pick_color(image, drawable, click_x, click_y, False, False, 0)
    if success:
        print(f"触发点颜色: R={r}, G={g}, B={b}, A={a}")
    else:
        print("无法拾取触发点颜色")
else:
    print("触发点坐标超出图像范围")

二、无法获取点击点时,获取选区的代表性颜色

如果无法拿到用户点击坐标,可通过选区边界框计算中心像素,或直接计算选区平均颜色作为替代。

1. 取选区中心像素颜色

# 获取选区边界框
has_selection, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image)
if has_selection:
    # 计算选区中心坐标
    center_x = (x1 + x2) // 2
    center_y = (y1 + y2) // 2
    # 拾取中心像素颜色
    success, r, g, b, a = pdb.gimp_image_pick_color(image, drawable, center_x, center_y, False, False, 0)
    if success:
        print(f"选区中心颜色: R={r}, G={g}, B={b}, A={a}")

2. 计算选区平均颜色

通过创建临时可见图层提取选区内容,再利用直方图计算平均色值:

if has_selection:
    # 创建临时图层,仅包含选区可见内容
    temp_layer = pdb.gimp_layer_new_from_visible(image, image, "temp-selection-layer")
    pdb.gimp_image_insert_layer(image, temp_layer, None, 0)
    
    # 获取RGB通道直方图,返回值为(像素总数, 最小值, 最大值, 平均值, 标准差)
    hist_r = pdb.gimp_drawable_histogram(temp_layer, HISTOGRAM_RED, 0, 255)
    hist_g = pdb.gimp_drawable_histogram(temp_layer, HISTOGRAM_GREEN, 0, 255)
    hist_b = pdb.gimp_drawable_histogram(temp_layer, HISTOGRAM_BLUE, 0, 255)
    
    avg_r, avg_g, avg_b = hist_r[3], hist_g[3], hist_b[3]
    print(f"选区平均颜色: R={avg_r:.2f}, G={avg_g:.2f}, B={avg_b:.2f}")
    
    # 清理临时图层
    pdb.gimp_image_remove_layer(image, temp_layer)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:19