Photoshop脚本 选区与通道
选区(Selection)是 Photoshop 中最基本也最强大的功能之一。通过 ExtendScript,你可以用程序化的方式创建、修改和应用选区。
选区对象
每个文档都有一个 selection 属性,代表当前选区:
javascript
var doc = app.activeDocument;
var sel = doc.selection; 如果文档没有选区,selection 对象仍然存在,但其 bounds 属性返回 null。
选区属性
选区对象提供两个只读属性:
javascript
// 获取选区边界(像素值)
var bounds = sel.bounds;
if (bounds) {
alert("选区范围: 左=" + bounds[0] + " 上=" + bounds[1] +
" 右=" + bounds[2] + " 下=" + bounds[3]);
}
// 检查是否为实心选区(无羽化或半透明边缘)
alert("选区是否实心: " + sel.solid); bounds 返回包含四个 UnitValue 的数组 [left, top, right, bottom]。无选区时返回 null。
选区基本操作
javascript
// 全选 — 选中整个画布
sel.selectAll();
// 反选
sel.invert();
// 取消选择
sel.deselect(); 所有选区操作都是同步的,无需 async/await。
创建选区
使用 select 方法创建矩形选区:
javascript
var doc = app.activeDocument;
var sel = doc.selection;
// 创建一个 200x200 的矩形选区,替换现有选区,羽化 5 像素
sel.select([[100, 100], [300, 100], [300, 300], [100, 300]],
SelectionType.REPLACE, 5, false);
// 在当前选区上添加新区域
sel.select([[250, 250], [400, 250], [400, 400], [250, 400]],
SelectionType.EXTEND, 0, false);
// 从当前选区减去区域
sel.select([[150, 150], [250, 150], [250, 250], [150, 250]],
SelectionType.DIMINISH, 0, false); SelectionType 支持四种模式:REPLACE(替换)、EXTEND(添加)、DIMINISH(减去)、INTERSECT(交集)。
修改选区
选区创建后,可以对其进行各种变换:
javascript
// 扩展选区 10 像素
sel.expand(10);
// 收缩选区 5 像素
sel.contract(5);
// 羽化 3 像素
sel.feather(3);
// 选区平滑(消除锯齿边缘)
sel.smooth(2);
// 向右移动 50 像素,向下移动 30 像素
sel.translateBoundary(50, 30);
// 调整选区边界大小(水平 110%,垂直 90%,锚点居中)
sel.resizeBoundary(110, 90, AnchorPosition.MIDDLECENTER);
// 选区旋转 45 度
sel.rotate(45, AnchorPosition.MIDDLECENTER); 选区的保存与载入
选区可以保存到 Alpha 通道中,之后重新载入:
javascript
// 创建通道引用
var channel = doc.channels.add();
channel.name = "自定义选区";
// 将选区保存到通道
sel.store(channel, SelectionType.REPLACE);
// 取消选择
sel.deselect();
// 从通道重新载入选区
sel.load(channel, SelectionType.REPLACE, false); 选区填充与描边
javascript
// 创建填充颜色
var fillColor = new SolidColor();
fillColor.rgb.hexValue = "FF0000";
// 填充选区(正常模式,100% 不透明度)
sel.fill(fillColor, ColorBlendMode.NORMAL, 100, false);
// 选区描边(红色,3 像素,内部)
sel.stroke(fillColor, 3, StrokeLocation.INSIDE, ColorBlendMode.NORMAL, 100, false);
// 清除选区内容(删除选中区域的像素)
sel.clear();
// 复制选区内容(合并图层)
sel.copy(true);
// 剪切选区内容
sel.cut(); StrokeLocation 可选 INSIDE、CENTER、OUTSIDE。
高级选区操作
javascript
// 根据容差扩展选区(选择相似颜色区域)
sel.grow(32, true);
// 选择整个图像中所有相似颜色区域
sel.similar(32, true);
// 选区边界(只保留选区轮廓线)
sel.selectBorder(5);
// 将选区转换为工作路径(容差 2 像素)
sel.makeWorkPath(2); 通道操作
通道(Channel)是存储选区信息和颜色分量的容器:
javascript
var doc = app.activeDocument;
var channels = doc.channels; 通道属性
javascript
// 遍历所有通道
for (var i = 0; i < channels.length; i++) {
var ch = channels[i];
alert("通道 " + i + ": " + ch.name + "\n 类型: " + ch.kind + "\n 不透明度: " + ch.opacity);
} channel.kind 可取以下 ChannelType 值:
COMPONENT— 颜色分量通道(RGB 红绿蓝)MASKEDAREA— 被蒙版区域SELECTEDAREA— 选中区域SPOTCOLOR— 专色通道
通道操作
javascript
// 创建新通道(Alpha 通道)
var alpha = doc.channels.add();
alpha.name = "蒙版通道";
alpha.color.rgb.hexValue = "FF0000"; // 通道显示颜色
alpha.opacity = 50; // 通道叠加显示不透明度
// 复制通道
var copy = alpha.duplicate(doc);
copy.name = "通道副本";
// 合并专色通道
if (alpha.kind == ChannelType.SPOTCOLOR) {
alpha.merge();
} 使用示例:为图片添加边框选区
以下完整示例演示了选区操作的典型流程:
javascript
var doc = app.activeDocument;
var sel = doc.selection;
// 全选画布
sel.selectAll();
// 收缩 20 像素得到内边框区域
sel.contract(20);
// 反选得到边框区域
sel.invert();
// 用白色填充边框
var fillColor = new SolidColor();
fillColor.rgb.hexValue = "FFFFFF";
sel.fill(fillColor, ColorBlendMode.NORMAL, 100, false);
// 取消选区
sel.deselect();