Photoshop支持使用腳本來批處理psd文件。此文章只是一些說明。
- psd腳本包含三類:appleScript、VbScript、JavaScript
- js腳本后綴支持:.js或者.jsx。可以自動加載也可以手動加載
- psd文檔對象-包含關系:Application------包含DocumentCollection----包含DocumentObject-----包含ArtLayerCollection、HistoryStateCollection、LayersCollection、LayerSetCollection、ChannelsCollection
-
處理對象前,需要將對象激活、置頂、選中,即設置ActiveDocument或者ActiveLayer。
-
跳過optional parameter 方法里可以用 placeholder undefined
1.psd腳本使用方法
2 編寫腳本所需工具:
- photoshopCC2014:運行腳本環境,查看psd文檔,對照結果
- ExtendScript Toolkit:運行腳本、調試腳本 https://www.adobe.com/devnet/scripting/estk.html
- ScriptListener.8li :即ScriptListener,腳本錄制器,用來實現jsx的sdk開發pdf文檔里沒有的功能
- json2.json:處理json對象
- jsonViewer:查看json對象
- visualStudio2017:編輯jsx腳本及代碼美化
- photoshop 開發文檔:https://www.adobe.com/devnet/photoshop/scripting.html
3.ExtendScript ToolKit:
快捷鍵 f7錯誤檢查、f2 書簽、ctrl+f2書簽、f6切換文檔、
4.常用代碼片段
打開文件: var fileRef=new File("c:\\xx.pdf"); var pdfOpenOption=new PdfOpenOptions(); pdfOpenOption.antiAlias=true;//抗鋸齒 ---------------.mode=OpenDocumentMode.RGB ---------------.resolution=72 ---------------.page=3 app.open(fileRef,pdfOpenOption)
保存圖片: var jpgFile=new File("c:\\xx.jpg") jpgSaveOption=new JpegSaveOption() app.activeDocument.saveAs(jpegFile,jpgSaveOption,true,CaseExtention.Lower)
禁用對話框:
app.displayDialogs=DialogModes.No
調整圖像和畫布的尺寸: app.preferences.rulerUnits=units.INCHS var fileRef=new File(app.Path+"\samples/xx.tif") var docRef=app.Open(fileRef) docRef.ResizeImage(4,4) docRef.ResizeCanvas(4,4) docRef.Trim(TrimType.TOPLEFT,true,false,true,false)//trim意思是修剪,此處類似於超出邊界時的修剪規則設置
裁剪圖像 app.preference.rulerUnits=units.pixels docRef.Crop(new Array(100,200,300,300),45,20,2), docRef.flipCanvasDirection.Horizontal)//翻轉 ArtLayer和LayerSets下面有collectionObjects。ArtLayers和LayerSets有Add()方法//layerSet相當於圖層組 取得圖層名: layers["Layer 3"].name var layerRef=app.activeDocument.layers[0] 圖層融合模式 layerRef。blendMode=blendMode.Normal
多選:layer1Ref.link(layer2Ref)
加載第三方庫: var c = $.fileName; var jsonF = c.substr(0, c.lastIndexOf("/")) + "/json2.js"; $.evalFile(jsonF)
打印日志:
$.writeln (text)
常用ExtendScript Toolkit軟件界面: Console->查看日志 DataBrowser->調試數據實時查看
取色器取得某個點的顏色function getDocColor(doc, x, y) { try { var samplers = doc.colorSamplers; if (samplers.length == 0) { var posA = new Array(x, y); samplers.add(posA); } var sam = doc.colorSamplers[0]; var p = new Array(x, y) sam.move(p); var col = sam.color; return col.rgb.hexValue; } catch (e) { return "000000" } }
復制樣式: var idCpFX = charIDToTypeID("CpFX"); executeAction(idCpFX, undefined, DialogModes.NO);
黏貼樣式: var idPaFX = charIDToTypeID("PaFX"); var desc4 = new ActionDescriptor(); var idallowPasteFXOnLayerSet = stringIDToTypeID("allowPasteFXOnLayerSet"); desc4.putBoolean(idallowPasteFXOnLayerSet, true); executeAction(idPaFX, desc4, DialogModes.NO);
圖層增加顏色函數 var r = 255; var g = 0; var b = 0; var a = 58; var idsetd = charIDToTypeID("setd"); var desc5 = new ActionDescriptor(); var idnull = charIDToTypeID("null"); var ref2 = new ActionReference(); var idPrpr = charIDToTypeID("Prpr"); var idLefx = charIDToTypeID("Lefx"); ref2.putProperty(idPrpr, idLefx); var idLyr = charIDToTypeID("Lyr "); var idOrdn = charIDToTypeID("Ordn"); var idTrgt = charIDToTypeID("Trgt"); ref2.putEnumerated(idLyr, idOrdn, idTrgt); desc5.putReference(idnull, ref2); var idT = charIDToTypeID("T "); var desc6 = new ActionDescriptor(); var idScl = charIDToTypeID("Scl "); var idPrc = charIDToTypeID("#Prc"); desc6.putUnitDouble(idScl, idPrc, 100.000000); var idSoFi = charIDToTypeID("SoFi"); var desc7 = new ActionDescriptor(); var idenab = charIDToTypeID("enab"); desc7.putBoolean(idenab, true); var idMd = charIDToTypeID("Md "); var idBlnM = charIDToTypeID("BlnM"); var idNrml = charIDToTypeID("Nrml"); desc7.putEnumerated(idMd, idBlnM, idNrml); var idOpct = charIDToTypeID("Opct"); var idPrc = charIDToTypeID("#Prc"); desc7.putUnitDouble(idOpct, idPrc, a); var idClr = charIDToTypeID("Clr "); var desc8 = new ActionDescriptor(); var idRd = charIDToTypeID("Rd "); desc8.putDouble(idRd, r); var idGrn = charIDToTypeID("Grn "); desc8.putDouble(idGrn, g); var idBl = charIDToTypeID("Bl "); desc8.putDouble(idBl, b); var idRGBC = charIDToTypeID("RGBC"); desc7.putObject(idClr, idRGBC, desc8); var idSoFi = charIDToTypeID("SoFi"); desc6.putObject(idSoFi, idSoFi, desc7); var idLefx = charIDToTypeID("Lefx"); desc5.putObject(idT, idLefx, desc6); executeAction(idsetd, desc5, DialogModes.NO);
載入選區 必須在柵格化之后調用,因為不同格式的圖層載入選區方式不一樣,但是柵格化之后,舊可以得到正確的選取了 相當於ps里 按下ctrl鍵,然后左鍵點擊圖層 function LoadSelectLayerArea() { var idsetd = charIDToTypeID("setd"); var desc7 = new ActionDescriptor(); var idnull = charIDToTypeID("null"); var ref8 = new ActionReference(); var idChnl = charIDToTypeID("Chnl"); var idfsel = charIDToTypeID("fsel"); ref8.putProperty(idChnl, idfsel); desc7.putReference(idnull, ref8); var idT = charIDToTypeID("T "); var ref9 = new ActionReference(); var idChnl = charIDToTypeID("Chnl"); var idChnl = charIDToTypeID("Chnl"); var idTrsp = charIDToTypeID("Trsp"); ref9.putEnumerated(idChnl, idChnl, idTrsp); desc7.putReference(idT, ref9); executeAction(idsetd, desc7, DialogModes.NO); }
柵格化-圖層樣式 function RasterizeLayerStyle() { var idrasterizeLayer = stringIDToTypeID("rasterizeLayer"); var desc2 = new ActionDescriptor(); var idnull = charIDToTypeID("null"); var ref1 = new ActionReference(); var idLyr = charIDToTypeID("Lyr "); var idOrdn = charIDToTypeID("Ordn"); var idTrgt = charIDToTypeID("Trgt"); ref1.putEnumerated(idLyr, idOrdn, idTrgt); desc2.putReference(idnull, ref1); var idWhat = charIDToTypeID("What"); var idrasterizeItem = stringIDToTypeID("rasterizeItem"); var idlayerStyle = stringIDToTypeID("layerStyle"); desc2.putEnumerated(idWhat, idrasterizeItem, idlayerStyle); executeAction(idrasterizeLayer, desc2, DialogModes.NO); }
//獲取文檔某個位置的顏色 function getDocColor(doc, x, y) { try { var samplers = doc.colorSamplers; if (samplers.length == 0) { var posA = new Array(x, y); samplers.add(posA); } var sam = doc.colorSamplers[0]; var p = new Array(x, y) sam.move(p); var col = sam.color; return col.rgb.hexValue; } catch (e) { return "000000" } }