2011-09-08 81 views
9

在为Photoshop CS3编写脚本之前,我正在做一些研究。我想用JavaScript在Photoshop中编写脚本。如何在Photoshop中访问图层样式信息?

我已经浏览了Photoshop JavaScript指南,但是我找不到任何方法来获取图层的图层样式信息(描边,渐变,外部发光等)。

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

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

+1

是的,Adobe的文档糟透了。 –

+0

哈哈,对于如何设置不同图层样式(渐变颜色,笔触宽度等)的选项没有任何线索。 –

+0

我只需要左手复制/粘贴PS(ctr-ins/shift-ins),我被告知必须编写脚本。开始了漫长的沮丧之旅,放弃了。 –

回答

1

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

在“浏览器”侧面选项卡中的对象模型浏览器中选择Photoshop。现在您可以使用右上角的搜索栏进行搜索。

请参见下面的图像ArtLayer的deifinition和ArtLayer.applyStyle()

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

enter image description here

搜索周围,它比Adobe的文档要好得多。

+0

伟大的提示!这比愚蠢的PDF更容易浏览。但是,我仍然无法找到访问图层样式信息的方法。感谢您的回应! –

+0

ExtendScript对象浏览器很糟糕。它们没有包含SolidColor作为记录的类之一。 – thenonhacker

1

我希望我不会太迟,因为我遇到了同样的问题,所以我发现了一个解决方案http://www.rags-int-inc.com/PhotoTechStuff/CollageTemplate/index.html。这个人有一个叫做“Layer Effects Options”的脚本。您可以在底部下载源代码。

嗯,它只是一个面板应用效果,但如果你浏览代码,你可以提取你所需要的。

这里是施加中风效果的活性层

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); 
} 

我不知道所有线路的确切含义(它主要是复制&粘贴)有点exsample(我所需要的),但它的工作原理:-)(仅测试了它的Photoshop CS5)

2

一个新的模块jamStyles最近已加入到JSON操作管理器脚本库的Photoshop。

除其他东西,它定义两个JavaScript函数jamStyles.getLayerStylejamStyles.setLayerStyle,其提供用于获取和设置当前层样式支撑件(两者混合选项层效果)使用JSON目的。

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

+0

最后经过几个小时的搜索,这一个工程。返回我所需要的:'{“blendOptions”:{...},“layerEffects”:{...}} - 真棒! –