首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Photoshop脚本复制和重命名层

Photoshop脚本复制和重命名层
EN

Stack Overflow用户
提问于 2017-09-27 17:43:53
回答 1查看 2K关注 0票数 0

在创建脚本时,当我开始在Photoshop上处理新图片时,会自动执行所有不同的任务,但我遇到了以下问题。

我想在这些组中创建不同的组和不同的层。在此之前一切都很顺利:

代码语言:javascript
复制
#target photoshop

app.bringToFront();

var doc = app.activeDocument;

newCurve();

var clippingHelpLayerLight = doc.activeLayer;
clippingHelpLayerLight.blendMode = BlendMode.SCREEN;
clippingHelpLayerLight.name = "Clipping Help Layer - Light";
clippingHelpLayerLight.visible = false;
clippingHelpLayerLight.duplicate();

var clippingHelpLayerLighter = doc.activeLayer;
clippingHelpLayerLighter.name = "Clipping Help Layer - Lighter";
clippingHelpLayerLighter.visible = false;

function newCurve() {
    var c_ADJ_LAYER = charIDToTypeID("AdjL");
    var c_ADJUSTMENT = charIDToTypeID("Adjs");
    var c_CHANNEL = charIDToTypeID("Chnl");
    var c_COMPOSITE = charIDToTypeID("Cmps");
    var c_CURVE = charIDToTypeID("Crv ");
    var c_CURVE_A = charIDToTypeID("CrvA");
    var c_CURVES = charIDToTypeID("Crvs");
    var c_HORIZONTAL = charIDToTypeID("Hrzn");
    var c_MAKE = charIDToTypeID("Mk  ");
    var c_NULL = charIDToTypeID("null");
    var c_POINT = charIDToTypeID("Pnt ");
    var c_TYPE = charIDToTypeID("Type");
    var c_USING = charIDToTypeID("Usng");
    var c_VERTICAL = charIDToTypeID("Vrtc");

    var d_CURVES_LAYER = new ActionDescriptor();
    // Contains all the information necessary to perform the "MAKE" action
    var r_CLASS = new ActionReference();
    r_CLASS.putClass(c_ADJ_LAYER);
    d_CURVES_LAYER.putReference(c_NULL, r_CLASS);
    // Class of make action is of an ajdustment layer
    var d_TYPE_CURVES = new ActionDescriptor();
    // Contains all the information about all the curves
    var d_CHANNEL_CURVES = new ActionDescriptor();
    var l_CHANNEL_CURVES = new ActionList();
    // Contains a list of channel curves
    var d_CHANNEL_CURVE = new ActionDescriptor();
    // Information for 1 channel curve
    var r_CHANNEL = new ActionReference();
    r_CHANNEL.putEnumerated(c_CHANNEL, c_CHANNEL, c_COMPOSITE);
    // This curve is for the composite channel - VARIES
    d_CHANNEL_CURVE.putReference(c_CHANNEL, r_CHANNEL);
    // Contains the point list
    var l_POINTS = new ActionList();
    // List of points for this channel - LENGTH VARIES
    var d_POINT = new ActionDescriptor();
    // One point on the curve, has INPUT and OUTPUT value
    d_POINT.putDouble(c_HORIZONTAL, 0.000000);
    d_POINT.putDouble(c_VERTICAL, 0.000000);
    l_POINTS.putObject(c_POINT, d_POINT);
    //var d_POINT3 = new ActionDescriptor();
    d_POINT.putDouble(c_HORIZONTAL, 255.000000);
    d_POINT.putDouble(c_VERTICAL, 255.000000);
    l_POINTS.putObject(c_POINT, d_POINT);
    // Made the list of points
    d_CHANNEL_CURVE.putList(c_CURVE, l_POINTS);
    // Now have a list of points for a specific channel
    l_CHANNEL_CURVES.putObject(c_CURVE_A, d_CHANNEL_CURVE);
    // Add to the list of channel curves
    d_CHANNEL_CURVES.putList(c_ADJUSTMENT, l_CHANNEL_CURVES);
    // All the channel curves are inside here
    d_TYPE_CURVES.putObject(c_TYPE, c_CURVES, d_CHANNEL_CURVES);
    // .....
    d_CURVES_LAYER.putObject(c_USING, c_ADJ_LAYER, d_TYPE_CURVES);
    // package the curves and definition of the adjustment layer type
    executeAction(c_MAKE, d_CURVES_LAYER, DialogModes.NO);
}

我实际上想创建第一层,称为“剪裁帮助层-光”,混合模式:屏幕和关闭它。然后复制它,更改新层的名称为“剪裁帮助层-打火机”,并关闭它。

像这样:我想做的事的截图

它确实创建了2层,但是第一层在其名称的末尾有“拷贝”,并且保持打开。

实际结果的截图

为什么?

我不明白为什么它不能像预期的那样工作,也不能设法修复它。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-10 18:29:01

我相信你遇到的问题与doc.activeLayer有关。在复制了“剪裁帮助层-光明”之后,脚本似乎并没有改变doc.activeLayer所指向的内容,因此当您尝试将它分配给clippingHelpLayerLighter时,您将指向一个未定义的层。虽然我不知道当你这么做的时候幕后到底发生了什么,但我相信这会解决你的问题:

代码语言:javascript
复制
#target photoshop

app.bringToFront();

var doc = app.documents.add( 4, 4 );

doc = app.activeDocument;

var clippingHelpLayerLight = doc.activeLayer;
clippingHelpLayerLight.blendMode = BlendMode.SCREEN;
clippingHelpLayerLight.name = "Clipping Help Layer - Light";
clippingHelpLayerLight.visible = false;
clippingHelpLayerLight.duplicate();

doc.activeLayer = doc.layers[ "Clipping Help Layer - Light copy" ];
doc.activeLayer.name = "Clipping Help Layer - Lighter";
doc.activeLayer.visible = false;

//I am not sure if you need this pointer to be called upon later in your 
//code. If you do not, just leave this line out.
var clippingHelpLayerLighter = doc.activeLayer;

希望这能有所帮助!如果你有任何问题,请告诉我,我绝不是专家,但我经常使用脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46454113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档