Photoshop CC滴管工具脚本

时间:2018-01-27 15:59:43

标签: scripting automation batch-processing photoshop

我有批量操作在图像后面放置纯白色背景。我希望能够从每张照片上的固定像素位置选择颜色。当我在动作中记录滴管时,它只记录我选择的颜色,而不记录采摘颜色的动作。我已经研究过脚本并在网上尝试了各种解决方案。

这是我尝试的脚本:

var docRef = app.activeDocument;
var pixelLoc = [32,42];
var colorSamplerRef = docRef.colorSamplers.add(pixelLoc);
app.foregroundColor = colorSamplerRef.color;

它并没有执行我需要的操作。哪个是选择 - >颜色范围 - >固定位置的滴管工具

1 个答案:

答案 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();

附加说明:

  1. Photoshop允许添加最多四个颜色取样器。如果文档中已包含四个颜色取样器,那么在尝试添加另一个颜色取样器时我们会收到错误。为避免发生这种情况,我们首先调用docRef.colorSamplers.removeAll();将其全部删除。

  2. 此外,为确保结果选择(即调用selectColorRange函数后创建的选择)不受任何现有选择的影响,我们首先通过调用{{1}取消选择它们}

  3. 最后,通过调用docRef.selection.deselect();

  4. 删除我们最初添加的颜色取样器

    我不确定您的问题,一旦创建了选择,您打算如何选择。作为一个例子;

    • 假设您要清除所选内容,然后调用colorSampleRef.remove();

    • 如果您想使用之前采样的颜色填充结果选择,请致电docRef.selection.clear();