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

如何检测边界矩形相同的两个选区的实际大小差异?

如何区分边界矩形相同但实际范围不同的Photoshop选区?

当两个选区的app.activeDocument.selection.bounds返回相同值,但实际选区范围不同时,可以通过以下两种方法区分它们的实际大小:

方法一:统计选区内的像素数量

这种方法通过将选区存入临时Alpha通道,统计通道中白色像素(代表选区范围)的数量,直接反映选区的实际像素覆盖面积,适合处理包含羽化、半透明的选区。

示例代码(JavaScript):

function getSelectionPixelCount() {
    const doc = app.activeDocument;
    // 创建临时Alpha通道
    const tempChannel = doc.channels.add();
    // 将选区存储到临时通道
    doc.selection.store(tempChannel);
    // 获取通道像素数据
    const channelData = tempChannel.pixelData;
    let pixelCount = 0;

    // 遍历统计白色像素(值为255)的数量
    for (let i = 0; i < channelData.length; i++) {
        if (channelData[i] === 255) pixelCount++;
    }

    // 删除临时通道
    tempChannel.remove();
    return pixelCount;
}

// 使用示例
const actualSize = getSelectionPixelCount();
alert(`选区实际覆盖像素数:${actualSize}`);

方法二:计算选区路径的面积

如果选区是矢量形状类的,可以将选区转换为工作路径,用鞋带公式计算路径围成的面积,精度更高且速度更快,适合无羽化的规则/不规则矢量选区。

示例代码(JavaScript):

function getSelectionPathArea() {
    const doc = app.activeDocument;
    // 将选区转换为工作路径(容差可根据需求调整)
    doc.selection.makeWorkPath(0.5);
    const workPath = doc.paths[doc.paths.length - 1];
    let totalArea = 0;

    // 遍历所有子路径计算面积
    for (const subPath of workPath.subPathItems) {
        const points = subPath.pathPoints;
        const pointCount = points.length;
        if (pointCount < 3) continue; // 至少3个点才能构成闭合区域

        let subArea = 0;
        // 应用鞋带公式计算子路径面积
        for (let i = 0; i < pointCount; i++) {
            const p1 = points[i].anchor;
            const p2 = points[(i + 1) % pointCount].anchor;
            subArea += (p1[0] * p2[1]) - (p1[1] * p2[0]);
        }
        totalArea += Math.abs(subArea) / 2;
    }

    // 删除临时工作路径
    workPath.remove();
    return totalArea;
}

// 使用示例
const pathArea = getSelectionPathArea();
alert(`选区路径面积:${pathArea} 平方像素`);

方法对比

  • 像素统计法:适用于所有类型选区(包括羽化选区),但大文档下遍历像素会稍慢。
  • 路径面积法:仅适用于可转换为路径的矢量类选区,计算速度快、精度高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:06:07