我有批量操作在图像后面放置纯白色背景。我希望能够从每张照片上的固定像素位置选择颜色。当我在动作中记录滴管时,它只记录我选择的颜色,而不记录采摘颜色的动作。我已经研究过脚本并在网上尝试了各种解决方案。
这是我尝试的脚本:
var docRef = app.activeDocument;
var pixelLoc = [32,42];
var colorSamplerRef = docRef.colorSamplers.add(pixelLoc);
app.foregroundColor = colorSamplerRef.color;
它并没有执行我需要的操作。哪个是选择 - >颜色范围 - >固定位置的滴管工具
答案 0 :(得分:1)
要实现此目的,您可以创建一个自定义函数来调用颜色范围生成的选择,(在下面的示例要点中命名为selectColorRange
)。
selectColorRange
功能利用new ActionDescripter()
配置属性,当您手动选择选择 - >时,该属性类似于对话框中显示的设置选项。 菜单栏中的颜色范围。在给定 x / y 坐标处添加 colorSampler 后调用此函数,如下所示:
selectColorRange(sampledColor, 80); // <-- Specify the fuzziness as required.
请注意我们如何传入之前的sampledColor
值以及模糊值80(这是Photoshop中使用的默认值)。
示例要点:
var docRef = app.activeDocument; // Assumes a document is active.
// Remove any Color Samplers that may already exist.
docRef.colorSamplers.removeAll();
// deselct any selection that may already exist.
docRef.selection.deselect();
// Get color sample from a given x,y coordinate.
var pixelLoc = [32,42];
var colorSampleRef = docRef.colorSamplers.add(pixelLoc);
var sampledColor = colorSampleRef.color;
// Set the foreground color to the sampled color.
app.foregroundColor = colorSampleRef.color;
/**
* Invokes and configures `Select > Color Range` from menu bar.
* @param {Object} color - The sampled color object.
* @param {Number} [fuzziness=80] - The Fuziness value (between 0-200).
*/
function selectColorRange(color, fuzziness) {
fuzziness = (typeof fuzziness !== 'undefined') ? fuzziness : 80;
var d1 = new ActionDescriptor();
// Set the amount of Fuzziness.
d1.putInteger(charIDToTypeID('Fzns'), fuzziness);
// Set invert option to false.
d1.putBoolean(charIDToTypeID('Invr'), false);
d1.putInteger(stringIDToTypeID('colorModel'), 0);
// Set the lAB value for Minimum.
var d2 = new ActionDescriptor();
d2.putDouble(charIDToTypeID('Lmnc'), color.lab.l);
d2.putDouble(charIDToTypeID('A '), color.lab.a);
d2.putDouble(charIDToTypeID('B '), color.lab.b);
d1.putObject(charIDToTypeID('Mnm '), charIDToTypeID('LbCl'), d2);
// Set the lAB value for Maximum.
var d3 = new ActionDescriptor();
d3.putDouble(charIDToTypeID('Lmnc'), color.lab.l);
d3.putDouble(charIDToTypeID('A '), color.lab.a);
d3.putDouble(charIDToTypeID('B '), color.lab.b);
d1.putObject(charIDToTypeID('Mxm '), charIDToTypeID('LbCl'), d3);
// Run the Color Range command without showing dialog.
executeAction(charIDToTypeID('ClrR'), d1, DialogModes.NO);
}
// Invoke the function passing in the sample
// color and default fuzziness value.
selectColorRange(sampledColor, 80);
//docRef.selection.clear();
//docRef.selection.fill(app.foregroundColor);
// Remove the Color Sampler.
colorSampleRef.remove();
附加说明:
Photoshop允许添加最多四个颜色取样器。如果文档中已包含四个颜色取样器,那么在尝试添加另一个颜色取样器时我们会收到错误。为避免发生这种情况,我们首先调用docRef.colorSamplers.removeAll();
将其全部删除。
此外,为确保结果选择(即调用selectColorRange
函数后创建的选择)不受任何现有选择的影响,我们首先通过调用{{1}取消选择它们}
最后,通过调用docRef.selection.deselect();
我不确定您的问题,一旦创建了选择,您打算如何选择。作为一个例子;
假设您要清除所选内容,然后调用colorSampleRef.remove();
。
如果您想使用之前采样的颜色填充结果选择,请致电docRef.selection.clear();