Photoshop脚本 颜色与填充

ExtendScript 通过 SolidColor 对象表示颜色。这个通用颜色类支持多种色彩模型,你可以根据需要选择最合适的模型来赋值。

SolidColor 对象

创建颜色对象后,选择一个色彩模型进行赋值:

javascript
// 创建红色(RGB 模型)
var red = new SolidColor();
red.rgb.red = 255;
red.rgb.green = 0;
red.rgb.blue = 0;

// 创建蓝色(HSB 模型)
var blue = new SolidColor();
blue.hsb.hue = 240;
blue.hsb.saturation = 100;
blue.hsb.brightness = 100;

// 创建灰色(Gray 模型)
var gray = new SolidColor();
gray.gray.gray = 50;

alert("颜色模型: " + red.model); // "RGBColor"

RGB 模型

javascript
var c = new SolidColor();
c.rgb.red = 255;
c.rgb.green = 128;
c.rgb.blue = 0;
c.rgb.hexValue = "FF8000"; // 也可用十六进制字符串

每个分量取值范围 0-255。

HSB 模型

javascript
var c = new SolidColor();
c.hsb.hue = 200;        // 色相 0-360
c.hsb.saturation = 80;  // 饱和度 0-100
c.hsb.brightness = 90;  // 亮度 0-100

CMYK 模型

javascript
var c = new SolidColor();
c.cmyk.cyan = 50;     // 青色 0-100
c.cmyk.magenta = 30;  // 洋红 0-100
c.cmyk.yellow = 10;   // 黄色 0-100
c.cmyk.black = 5;     // 黑色 0-100

Lab 模型

javascript
var c = new SolidColor();
c.lab.l = 60;   // 明度 0-100
c.lab.a = 20;   // a 轴 -128~127
c.lab.b = -30;  // b 轴 -128~127

各模型取值一览

模型属性值范围
RGB.rgb.red, .rgb.green, .rgb.blue0-255
RGB.rgb.hexValue"FF8000"
HSB.hsb.hue, .hsb.saturation, .hsb.brightness0-360, 0-100, 0-100
CMYK.cmyk.cyan, .cmyk.magenta, .cmyk.yellow, .cmyk.black0-100
Lab.lab.l, .lab.a, .lab.b0-100, -128127, -128127
Gray.gray.gray0-100

设置前景色与背景色

前景色和背景色是 Photoshop 中的全局颜色属性,可以通过脚本直接赋值:

javascript
// 将前景色设为红色
app.foregroundColor = red;

// 将背景色设为蓝色
var bgColor = new SolidColor();
bgColor.rgb.hexValue = "0066FF";
app.backgroundColor = bgColor;

填充选区

颜色最常见的用途是填充图层或选区:

javascript
var doc = app.activeDocument;

// 创建填充颜色
var fillColor = new SolidColor();
fillColor.rgb.hexValue = "F0F0FA";

// 全选画布
doc.selection.selectAll();

// 填充选区(正常模式,100% 不透明度,保留透明度关闭)
doc.selection.fill(fillColor, ColorBlendMode.NORMAL, 100, false);

// 取消选择
doc.selection.deselect();

ColorBlendMode 可选值:NORMALMULTIPLYSCREENOVERLAYDARKENLIGHTENCOLORDODGECOLORBURNHARDLIGHTSOFTLIGHTDIFFERENCEEXCLUSIONHUESATURATIONCOLORLUMINOSITY

文本图层颜色

对于文本图层,可以直接设置文字颜色:

javascript
var doc = app.activeDocument;
var textLayer = doc.artLayers.add();
textLayer.kind = LayerKind.TEXT;

var textColor = new SolidColor();
textColor.rgb.red = 220;
textColor.rgb.green = 50;
textColor.rgb.blue = 50;

textLayer.textItem.color = textColor;
textLayer.textItem.contents = "Photoshop ExtendScript";
textLayer.textItem.size = 48;
textLayer.textItem.position = [100, 300];

完整示例:生成渐变色色板

以下示例创建 5 个图层,每个图层填充不同的颜色,形成一个简单的色板:

javascript
var doc = app.documents.add(500, 100, 72, "色板", NewDocumentMode.RGB);
var colors = [
  { red: 255, green: 59, blue: 48 },  // 红
  { red: 255, green: 149, blue: 0 },  // 橙
  { red: 255, green: 204, blue: 0 },  // 黄
  { red: 52, green: 199, blue: 89 },  // 绿
  { red: 0, green: 122, blue: 255 }   // 蓝
];

for (var i = 0; i < colors.length; i++) {
  var layer = doc.artLayers.add();
  layer.name = "色块 " + (i + 1);

  var swatch = new SolidColor();
  swatch.rgb.red = colors[i].red;
  swatch.rgb.green = colors[i].green;
  swatch.rgb.blue = colors[i].blue;

  doc.selection.select(
    [[i * 100, 0], [(i + 1) * 100, 0], [(i + 1) * 100, 100], [i * 100, 100]],
    SelectionType.REPLACE, 0, false
  );
  doc.selection.fill(swatch, ColorBlendMode.NORMAL, 100, false);
  doc.selection.deselect();
}