2011-09-08 82 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」:{...}} - 真棒! –