【发布时间】:2018-03-09 07:26:24
【问题描述】:
当我开始在 Photoshop 上处理新图片时,我在创建一个可以自动执行所有不同任务的脚本时,遇到了以下问题。
我想在这些组中创建不同的组和不同的层。在此之前一切都很好:
#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);
}
我实际上想创建一个名为“Clipping Help Layer - Light”的第一层,混合模式:屏幕并将其关闭。然后复制它,将新图层的名称更改为“Clipping Help Layer - Lighter”并关闭它。
像这样:Screenshot of what I would like to do
它确实创建了 2 个图层,但第一个图层的名称末尾有“副本”并且它保持打开状态。
Screenshot of the actual result
为什么?
我不明白为什么它不能按预期工作并且无法修复它。
任何帮助将不胜感激!
【问题讨论】:
-
我看不到你的源图像,所以这是在黑暗中的刺,你可能想使用 getLayerByname 使新的较浅层成为 activeLayer。
-
非常感谢您的回答!这是我第一次寻求有关脚本的帮助,我试图通过仅复制对我的问题有用的部分来保持简单。我现在意识到我没有复制足够多的代码来理解......
-
所以我尝试在第二次重命名之前添加这个: doc.activeLayer = doc.artLayers.getByName("Clipping Help Layer - Light copy"); var clippingHelpLayerLighter = doc.activeLayer; clippingHelpLayerLighter.name = "剪辑帮助层 - 打火机"; clippingHelpLayerLighter.visible = false;或者甚至可能像这样: var clippingHelpLayerLighter = doc.artLayers.getByName("Clipping Help Layer - Light copy");但是不知道为什么,getByName不起作用,说找不到像这样命名的层...
标签: scripting photoshop jsx photoshop-script