首页 > 解决方案 > Photoshop / 从选区中取出颜色

问题描述

请帮助解决以下问题:

我需要使用吸管从选定的随机形状区域中提取颜色,该区域相对于图像可能非常小,并且事先在画布上没有已知位置。这需要自动完成,无需手动点击。

以我的技能,我只能编写一个从当前文档中心抽取样本的脚本,这并不能解决问题,但它给出了方向。

 // Set reference for active document
var srcDoc = app.activeDocument;

// remove any sample first
srcDoc.colorSamplers.removeAll();


// get width and height of image
var w = srcDoc.width.value;
var h = srcDoc.height.value;

// get positions of the center of the image
//var x = 0;
//var y = 0;
var x = Math.round(w/2);
var y = Math.round(h/2);

// will pick a sample from the middle of the image
var px = [UnitValue(x) , UnitValue(y)];
var Sampler = srcDoc.colorSamplers.add(px);

// Copy RGB Values of current layer  with 3 decimal spaces
var myColor = Sampler.color;
var rgb_R = Math.round(myColor.rgb.red*1000)/1000;
var rgb_G = Math.round(myColor.rgb.green*1000)/1000;
var rgb_B = Math.round(myColor.rgb.blue*1000)/1000;



set(rgb_R, rgb_G, rgb_B, "photoshopPicker");
function set(red, Grn, blue, source) {
    var c2t = function (s) {
        return app.charIDToTypeID(s);
    };

    var s2t = function (s) {
        return app.stringIDToTypeID(s);
    };

    var descriptor = new ActionDescriptor();
    var descriptor2 = new ActionDescriptor();
    var reference = new ActionReference();

    reference.putProperty( s2t( "color" ), s2t( "foregroundColor" ));
    descriptor.putReference( c2t( "null" ), reference );
    descriptor2.putDouble( s2t( "red" ), red );
    descriptor2.putDouble( c2t( "Grn " ), Grn );
    descriptor2.putDouble( s2t( "blue" ), blue );
    descriptor.putObject( s2t( "to" ), s2t( "RGBColor" ), descriptor2 );
    descriptor.putString( s2t( "source" ), source );
    executeAction( s2t( "set" ), descriptor, DialogModes.NO );
}

在没有人工参与的情况下,我还没有找到在 PS 本身中执行此操作的方法,而且我没有编写脚本的经验,但编写脚本似乎是解决问题的正确方法。为这样的操作准备一个现成的脚本会很棒。

谢谢你。

标签: javascriptadobephotoshop

解决方案


推荐阅读