如何在Photoshop中访问图层样式信息?

9
我正在为编写Photoshop CS3脚本做一些研究,希望使用JavaScript在Photoshop中编写脚本。我已经查阅了Photoshop JavaScript指南,但无法找到获取图层样式信息(描边、渐变、外发光等)的方法。虽然有一种设置图层样式的方法,但我还没有找到任何可以获取信息的方法。由于我只有Photoshop CS3,因此我正在寻找适用于该版本的解决方案。

1
是的,Adobe的文档很糟糕。 - Diodeus - James MacFarlane
哈哈,是的,甚至没有任何线索可以设置不同图层样式(渐变颜色、描边宽度等)的选项。 - Bryan Downing
我想要的只是PS的左手复制/粘贴功能(ctr-ins/shift-ins),但被告知必须编写脚本。开始了漫长而令人沮丧的旅程,最终放弃了。 - Diodeus - James MacFarlane
兄弟,你说得没错。甚至没有监听按键事件的方法。你可以设置Ctrl + F12和Shift + F12作为快捷键,用于触发复制和粘贴功能。 - Bryan Downing
@DevinGRhode 谢谢,但我的目标是读取图层样式信息并输出CSS3代码。例如,您可以在Photoshop中创建一个按钮,然后只导出渐变、发光、描边等的CSS代码... - Bryan Downing
显示剩余2条评论
3个回答

2
我希望我不算太晚,我看了你的帖子,因为我也遇到了同样的问题,并在http://www.rags-int-inc.com/PhotoTechStuff/CollageTemplate/index.html上找到了解决方案。这个人有一个名为“图层效果选项”的脚本。您可以在底部下载源代码。
好吧,它只是一个应用效果的面板,但如果您浏览代码,就可以提取所需内容。
这里是一个小例子(我需要的内容),用于对活动图层应用描边效果。
function newStrokeEffect(strokeSize, strokeColor, strokePosition) {
    var effectDescriptor = new ActionDescriptor();
    var effectColor = new ActionDescriptor();
    var strokeOpacity = 100.0;      // 0 - 100 %
    var strokeBlend = "Nrml";       // Normal[Nrml], ColorBurn[CBrn], SoftLight[SftL}, Color[Clr ]

    effectDescriptor.putBoolean(charIDToTypeID("enab"), true);
    effectDescriptor.putEnumerated(charIDToTypeID("Styl"), charIDToTypeID("FStl"), charIDToTypeID(strokePosition));
    effectDescriptor.putEnumerated(charIDToTypeID("PntT"), charIDToTypeID("FrFl"), charIDToTypeID("SClr"));
    effectDescriptor.putEnumerated(charIDToTypeID("Md  "), charIDToTypeID("BlnM"), charIDToTypeID(strokeBlend));
    effectDescriptor.putUnitDouble(charIDToTypeID("Opct"), charIDToTypeID("#Prc"), strokeOpacity);
    effectDescriptor.putUnitDouble(charIDToTypeID("Sz  "), charIDToTypeID("#Pxl"), strokeSize);
    effectColor.putDouble(charIDToTypeID("Rd  "), strokeColor.rgb.red);
    effectColor.putDouble(charIDToTypeID("Grn "), strokeColor.rgb.green);
    effectColor.putDouble(charIDToTypeID("Bl  "), strokeColor.rgb.blue);
    effectDescriptor.putObject(charIDToTypeID("Clr "), charIDToTypeID("RGBC"), effectColor);
    return(effectDescriptor);
}

var tmpC = new SolidColor();
tmpC.rgb.hexValue = "FF00FF";
var layerOptions = new ActionDescriptor();
var refr01 = new ActionReference();
var layerProperties = new ActionDescriptor();

layerOptions.putUnitDouble(charIDToTypeID("Scl "), charIDToTypeID("#Prc"), 400.0);

var layerEffects = newStrokeEffect(2, tmpC, "InsF");

layerOptions.putObject(charIDToTypeID("FrFX"), charIDToTypeID("FrFX"), layerEffects);

refr01.putProperty(charIDToTypeID("Prpr"), charIDToTypeID("Lefx"));
refr01.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
layerProperties.putReference(charIDToTypeID("null"), refr01);
layerProperties.putObject(charIDToTypeID("T   "), charIDToTypeID("Lefx"), layerOptions);

try {
    executeAction(charIDToTypeID("setd"), layerProperties, DialogModes.NO);
} catch(ex) {
    if (ex != "Error: User cancelled the operation")
        alert(scriptName + " newLayerEffect() exception caught? line[" + ex.line + "] "  + ex);
}

我不知道所有行的确切意思(主要是复制粘贴),但它有效:-)(只在Photoshop CS5上测试过)


2
最近,JSON Action Manager脚本库为Photoshop新增了一个名为jamStyles的模块。jamStyles定义了两个JavaScript函数jamStyles.getLayerStylejamStyles.setLayerStyle,支持使用JSON对象获取和设置当前图层样式(包括混合选项和图层效果)。
此外,还提供了一个名为Get Layer Style的实用脚本。

终于在搜索数小时后,这个代码奏效了。返回我所需的内容:{ "blendOptions": {...}, "layerEffects": {...} },太棒了! - psycho brm

2
打开Adobe ExtendScript Toolkit。在菜单中选择帮助>对象模型浏览器(或类似选项,我的是德语)。
在“浏览器”侧边栏中选择Photoshop。现在你可以使用右上角的搜索框进行搜索。
参见下面的图片,了解ArtLayer的定义和ArtLayer.applyStyle()http://i.stack.imgur.com/UEmj6.png 搜索一下,它比Adobe的文档好多了。

太棒了!这比那个愚蠢的PDF要容易浏览得多。然而,我仍然找不到访问图层样式信息的方法。感谢您的回复! - Bryan Downing
ExtendScript对象浏览器太糟糕了。他们没有将SolidColor列为已记录的类之一。 - user46915

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接