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

时间:2011-09-08 18:25:28

标签: javascript photoshop

在为Photoshop CS3编写脚本之前,我正在做一些研究。我想用Photoshop在Photoshop中编写脚本。

我查看了Photoshop JavaScript指南,但我找不到任何方法来获取图层的图层样式信息(笔触,渐变,外部发光等)。

有一种方法可以设置图层样式,但我找不到任何可以让您获取信息的内容。

我只有Photoshop CS3,所以我正在寻找适合的解决方案。

3 个答案:

答案 0 :(得分:2)

最近在Photoshop的JSON Action Manager脚本库中添加了一个新模块jamStyles

除此之外,它定义了两个JavaScript函数 jamStyles.getLayerStyle jamStyles.setLayerStyle ,它们提供了对获取和设置当前图层样式的支持(两者都是混合选项图层效果)使用JSON对象。

还提供了名为Get Layer Style的实用程序脚本。

答案 1 :(得分:1)

打开Adobe ExtendScript Toolkit。在菜单中转到帮助>对象模型查看器(或类似的,我的是德语)。

在“浏览器”侧面标签中的对象模型浏览器中选择Photoshop。现在,您可以使用右上角的搜索字段进行搜索。

请参阅下图,了解ArtLayer的定义和ArtLayer.applyStyle()

http://i.stack.imgur.com/UEmj6.png

enter image description here

搜索一下,它比adobe的文档要好得多。

答案 2 :(得分:1)

我希望我不会太迟,我发布你的帖子,因为我有同样的问题,我在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上测试过)

相关问题