我真的認爲這是最好的使用JavaScript(你可以從呼叫,當然,通過文本或文件)來完成使用相當鈍但強大的ActionDescriptor方法。最好的(可以說是唯一的)方法是下載Scripting Listener插件(請參閱:http://forums.adobe.com/message/5428603),並使用它來解析和竊取部分代碼,並將這些部分放入自己的JavaScript代碼中。然後可以使用此代碼(PS中調用的.jsx文件)或通過從AppleScript調用JS代碼。
例如,下面是一個腳本(可以在PS CC中原樣運行)從Scripting Listener日誌中直接獲取,在當前選定圖層上創建一個內部陰影,並使用以下設置:混合模式「變暗」 ,RGB顏色{111,22,3},不透明度爲44%,角55度,距離:66個像素,扼流圈:7%,尺寸:88px(下面的腳本代碼的詳細信息):
// =======================================================
var idsetd = charIDToTypeID("setd");
var desc8 = new ActionDescriptor();
var idnull = charIDToTypeID("null");
var ref4 = new ActionReference();
var idPrpr = charIDToTypeID("Prpr");
var idLefx = charIDToTypeID("Lefx");
ref4.putProperty(idPrpr, idLefx);
var idLyr = charIDToTypeID("Lyr ");
var idOrdn = charIDToTypeID("Ordn");
var idTrgt = charIDToTypeID("Trgt");
ref4.putEnumerated(idLyr, idOrdn, idTrgt);
desc8.putReference(idnull, ref4);
var idT = charIDToTypeID("T ");
var desc9 = new ActionDescriptor();
var idgagl = charIDToTypeID("gagl");
var idAng = charIDToTypeID("#Ang");
desc9.putUnitDouble(idgagl, idAng, 55.000000);
var idScl = charIDToTypeID("Scl ");
var idPrc = charIDToTypeID("#Prc");
desc9.putUnitDouble(idScl, idPrc, 100.000000);
var idIrSh = charIDToTypeID("IrSh");
var desc10 = new ActionDescriptor();
var idenab = charIDToTypeID("enab");
desc10.putBoolean(idenab, true);
var idMd = charIDToTypeID("Md ");
var idBlnM = charIDToTypeID("BlnM");
var idDrkn = charIDToTypeID("Drkn");
desc10.putEnumerated(idMd, idBlnM, idDrkn);
var idClr = charIDToTypeID("Clr ");
var desc11 = new ActionDescriptor();
var idRd = charIDToTypeID("Rd ");
desc11.putDouble(idRd, 111.002197);
var idGrn = charIDToTypeID("Grn ");
desc11.putDouble(idGrn, 21.999664);
var idBl = charIDToTypeID("Bl ");
desc11.putDouble(idBl, 3.003845);
var idRGBC = charIDToTypeID("RGBC");
desc10.putObject(idClr, idRGBC, desc11);
var idOpct = charIDToTypeID("Opct");
var idPrc = charIDToTypeID("#Prc");
desc10.putUnitDouble(idOpct, idPrc, 44.000000);
var iduglg = charIDToTypeID("uglg");
desc10.putBoolean(iduglg, true);
var idlagl = charIDToTypeID("lagl");
var idAng = charIDToTypeID("#Ang");
desc10.putUnitDouble(idlagl, idAng, 120.000000);
var idDstn = charIDToTypeID("Dstn");
var idPxl = charIDToTypeID("#Pxl");
desc10.putUnitDouble(idDstn, idPxl, 66.000000);
var idCkmt = charIDToTypeID("Ckmt");
var idPxl = charIDToTypeID("#Pxl");
desc10.putUnitDouble(idCkmt, idPxl, 7.000000);
var idblur = charIDToTypeID("blur");
var idPxl = charIDToTypeID("#Pxl");
desc10.putUnitDouble(idblur, idPxl, 88.000000);
var idNose = charIDToTypeID("Nose");
var idPrc = charIDToTypeID("#Prc");
desc10.putUnitDouble(idNose, idPrc, 0.000000);
var idAntA = charIDToTypeID("AntA");
desc10.putBoolean(idAntA, false);
var idTrnS = charIDToTypeID("TrnS");
var desc12 = new ActionDescriptor();
var idNm = charIDToTypeID("Nm ");
desc12.putString(idNm, "Linear");
var idShpC = charIDToTypeID("ShpC");
desc10.putObject(idTrnS, idShpC, desc12);
var idIrSh = charIDToTypeID("IrSh");
desc9.putObject(idIrSh, idIrSh, desc10);
var idLefx = charIDToTypeID("Lefx");
desc8.putObject(idT, idLefx, desc9);
executeAction(idsetd, desc8, DialogModes.NO);
////////////////end script///
這有助於澄清一些隱藏代碼代表:http://www.pcpix.com/photoshop/char.htm
[編輯2017年5月]上面的鏈接已死亡。現在的信息生活在https://pastebin.com/h9bK3m8D和原始是通過「迴歸機」存檔:https://web-beta.archive.org/web/20140709161028/http://www.pcpix.com/photoshop/char.htm
如果你去這條路線(並且真的,我認爲它是目前唯一的方式來獲得這樣的一級控制某些行動),你應該知道日誌需要在桌面上生存,並且不分青紅皁白地填滿,所以我最終會定期清空它(和/或關掉它)。我意識到你在AS中可能比在JS中更舒服,但是如果你學習如何編寫JS腳本(或者甚至使用AS來編寫它們),那麼你變得幾乎是無所不能的(並且擁有巨大的權力是非常重要的)。有時你可以取出部分日誌編寫的代碼,並使代碼更「高效」,但是(很明顯,也許)錯誤可能會導致代碼和一般錯誤發生。
對於傳輸模式,stringIDToTypeID()方法可能最好使用charIDToTypeID()方法,而不是使用charIDToTypeID()方法。沒有深入理解,我只是說它更容易。只需使用傳輸模式的「駝峯」的版本,一拉:
var idDrkn = stringIDToTypeID("darken");
或
//changed variable name to better reflect a generic
var transferModeID = stringIDToTypeID("colorDodge");
desc10.putEnumerated(idMd, idBlnM, transferModeID);
您使用的是這個是什麼版本的Photoshop的? – CRGreen
在Adobe Cloud或Photoshop中工作CC –