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.blue | 0-255 |
| RGB | .rgb.hexValue | "FF8000" |
| HSB | .hsb.hue, .hsb.saturation, .hsb.brightness | 0-360, 0-100, 0-100 |
| CMYK | .cmyk.cyan, .cmyk.magenta, .cmyk.yellow, .cmyk.black | 0-100 |
| Lab | .lab.l, .lab.a, .lab.b | 0-100, -128 |
| Gray | .gray.gray | 0-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 可选值:NORMAL、MULTIPLY、SCREEN、OVERLAY、DARKEN、LIGHTEN、COLORDODGE、COLORBURN、HARDLIGHT、SOFTLIGHT、DIFFERENCE、EXCLUSION、HUE、SATURATION、COLOR、LUMINOSITY。
文本图层颜色
对于文本图层,可以直接设置文字颜色:
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();
}