zoukankan      html  css  js  c++  java
  • 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"
        }
    
    }
  • 相关阅读:
    How To Install a 2 Finger Gripper on ABB Robots
    Guide: How to Set Up I/O on an ABB Robot with an IRC5 Controller
    SIGVerse
    unity与ROS SIGVerse 仿真
    论文阅读:Automated acquisition of structured, semantic models of manipulation activities from human VR demonstration
    Python2.7+ROS环境:AttributeError:‘module’ has no attribute ‘CALIB_HAND_EYE_TSAI
    Qt音视频开发39-人脸识别在线版
    Qt音视频开发38-USB摄像头解码linux方案
    Qt音视频开发37-USB摄像头解码ffmpeg方案
    由浅入深讲述MVVM
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/13629883.html
Copyright © 2011-2022 走看看