photoshop腳本jsx概述


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"
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM