ps证件照滤镜动作设定(Photoshop插件-证件照-3寸裁剪-3寸排版-脚本开发-PS插件)
ps证件照滤镜动作设定(Photoshop插件-证件照-3寸裁剪-3寸排版-脚本开发-PS插件)文章引用至 插件开发流程 - 知乎文章引用至 作者联系方式function san_cun() { var idslct = charIDToTypeID("slct"); var desc1217 = new ActionDescriptor(); var idnull = charIDToTypeID("null"); var ref419 = new ActionReference(); var idcropTool = stringIDToTypeID("cropTool"); ref419.putClass(idcropTool); desc1217.putReference(idnull ref419); var iddontRecord = stringIDToT
PS是一款栅格图像编辑软件,模块众多。提供了脚本,动态连接库等多种扩展机制,可以制作证件照,本文演示如何通过脚本实现3寸裁剪和3寸排版功能相关功能,展示从互联网收集而来的一个小插件,供大家学习交流,请勿用于商业用途。
1.插件界面本文界面是一系列功能的一部分,将逐步展示,但是功能界面是共同的,如下图所示:

864d0a3bbb874fe1a074c4ac2e8c8428.png
2.关键代码2.1 3寸裁剪原理是调用预设1寸裁剪功能,如果读者没有相关文件,可以向作者留言,或在指定链接下载,大家可通过源代码阅读,来掌握相关技巧,源代码如下:
function san_cun() {
    var idslct = charIDToTypeID("slct");
    var desc1217 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    var ref419 = new ActionReference();
    var idcropTool = stringIDToTypeID("cropTool");
    ref419.putClass(idcropTool);
    desc1217.putReference(idnull  ref419);
    var iddontRecord = stringIDToTypeID("dontRecord");
    desc1217.putBoolean(iddontRecord  true);
    var idforceNotify = stringIDToTypeID("forceNotify");
    desc1217.putBoolean(idforceNotify  true);
    executeAction(idslct  desc1217  DialogModes.NO);
    var idslct = charIDToTypeID("slct");
    var desc1218 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    var ref420 = new ActionReference();
    var idtoolPreset = stringIDToTypeID("toolPreset");
    ref420.putName(idtoolPreset  "-3寸-");
    desc1218.putReference(idnull  ref420);
    executeAction(idslct  desc1218  DialogModes.NO);
}
2.2 3寸排版
    
大家可通过源代码阅读,来掌握相关技巧,源代码如下:
function san_cun_pai_ban() {
    function step1(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        desc1.putUnitDouble(cTID("Wdth")  cTID("#Rlt")  172.8);
        desc1.putUnitDouble(cTID("Hght")  cTID("#Rlt")  237.6);
        desc1.putEnumerated(cTID("Intr")  cTID("Intp")  sTID("automaticInterpolation"));
        executeAction(sTID("imageSize")  desc1  dialogMode);
    }
    function step2(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putProperty(cTID("Chnl")  sTID("selection"));
        desc1.putReference(cTID("null")  ref1);
        desc1.putEnumerated(cTID("T   ")  cTID("Ordn")  cTID("Al  "));
        executeAction(sTID("set")  desc1  dialogMode);
    }
    function step3(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        executeAction(sTID("copyEvent")  undefined  dialogMode);
    }
    function step4(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        desc1.putEnumerated(cTID("AntA")  cTID("Annt")  cTID("Anno"));
        desc1.putClass(cTID("As  ")  cTID("Pxel"));
        executeAction(sTID("paste")  desc1  dialogMode);
    }
    function step5(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putName(cTID("Lyr ")  "背景");
        desc1.putReference(cTID("null")  ref1);
        desc1.putBoolean(cTID("MkVs")  false);
        var list1 = new ActionList();
        list1.putInteger(1);
        desc1.putList(cTID("LyrI")  list1);
        executeAction(sTID("select")  desc1  dialogMode);
    }
    function step6(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        desc1.putUnitDouble(cTID("Wdth")  cTID("#Rlt")  252.283464566929);
        desc1.putUnitDouble(cTID("Hght")  cTID("#Rlt")  360);
        desc1.putEnumerated(cTID("Hrzn")  cTID("HrzL")  cTID("Cntr"));
        desc1.putEnumerated(cTID("Vrtc")  cTID("VrtL")  cTID("Cntr"));
        desc1.putEnumerated(sTID("canvasExtensionColorType")  sTID("canvasExtensionColorType")  cTID("BckC"));
        executeAction(sTID("canvasSize")  desc1  dialogMode);
    }
    function step7(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        desc1.putEnumerated(cTID("Usng")  cTID("FlCn")  cTID("BckC"));
        executeAction(sTID("fill")  desc1  dialogMode);
    }
    function step8(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putProperty(cTID("Clr ")  cTID("Clrs"));
        desc1.putReference(cTID("null")  ref1);
        executeAction(sTID("reset")  desc1  dialogMode);
    }
    function step9(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        desc1.putEnumerated(cTID("Usng")  cTID("FlCn")  cTID("BckC"));
        executeAction(sTID("fill")  desc1  dialogMode);
    }
    function step10(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putName(cTID("Lyr ")  "图层 1");
        desc1.putReference(cTID("null")  ref1);
        desc1.putBoolean(cTID("MkVs")  false);
        var list1 = new ActionList();
        list1.putInteger(2);
        desc1.putList(cTID("LyrI")  list1);
        executeAction(sTID("select")  desc1  dialogMode);
    }
    function step11(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putEnumerated(cTID("Lyr ")  cTID("Ordn")  cTID("Trgt"));
        desc1.putReference(cTID("null")  ref1);
        desc1.putEnumerated(cTID("FTcs")  cTID("QCSt")  sTID("QCSAverage"));
        var desc2 = new ActionDescriptor();
        desc2.putUnitDouble(cTID("Hrzn")  cTID("#Pxl")  0);
        desc2.putUnitDouble(cTID("Vrtc")  cTID("#Pxl")  0);
        desc1.putObject(cTID("Ofst")  cTID("Ofst")  desc2);
        desc1.putUnitDouble(cTID("Angl")  cTID("#Ang")  90);
        desc1.putEnumerated(cTID("Intr")  cTID("Intp")  cTID("Bcbc"));
        executeAction(sTID("transform")  desc1  dialogMode);
    }
    function step12(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putName(cTID("Lyr ")  "背景");
        desc1.putReference(cTID("null")  ref1);
        desc1.putEnumerated(sTID("selectionModifier")  sTID("selectionModifierType")  sTID("addToSelection"));
        desc1.putBoolean(cTID("MkVs")  false);
        var list1 = new ActionList();
        list1.putInteger(1);
        list1.putInteger(2);
        desc1.putList(cTID("LyrI")  list1);
        executeAction(sTID("select")  desc1  dialogMode);
    }
    function step13(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putEnumerated(cTID("Lyr ")  cTID("Ordn")  cTID("Trgt"));
        desc1.putReference(cTID("null")  ref1);
        desc1.putEnumerated(cTID("Usng")  cTID("ADSt")  sTID("ADSTops"));
        executeAction(sTID("align")  desc1  dialogMode);
    }
    function step14(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putName(cTID("Lyr ")  "图层 1");
        desc1.putReference(cTID("null")  ref1);
        desc1.putBoolean(cTID("MkVs")  false);
        var list1 = new ActionList();
        list1.putInteger(2);
        desc1.putList(cTID("LyrI")  list1);
        executeAction(sTID("select")  desc1  dialogMode);
    }
    function step15(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        executeAction(sTID("copyToLayer")  undefined  dialogMode);
    }
    function step16(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putEnumerated(cTID("Lyr ")  cTID("Ordn")  cTID("Trgt"));
        desc1.putReference(cTID("null")  ref1);
        var desc2 = new ActionDescriptor();
        desc2.putUnitDouble(cTID("Hrzn")  cTID("#Pxl")  0);
        desc2.putUnitDouble(cTID("Vrtc")  cTID("#Pxl")  728);
        desc1.putObject(cTID("T   ")  cTID("Ofst")  desc2);
        executeAction(sTID("move")  desc1  dialogMode);
    }
    function step17(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putName(cTID("Lyr ")  "图层 1");
        desc1.putReference(cTID("null")  ref1);
        desc1.putEnumerated(sTID("selectionModifier")  sTID("selectionModifierType")  sTID("addToSelection"));
        desc1.putBoolean(cTID("MkVs")  false);
        var list1 = new ActionList();
        list1.putInteger(2);
        list1.putInteger(3);
        desc1.putList(cTID("LyrI")  list1);
        executeAction(sTID("select")  desc1  dialogMode);
    }
    function step18(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putEnumerated(cTID("Lyr ")  cTID("Ordn")  cTID("Trgt"));
        desc1.putReference(cTID("null")  ref1);
        var desc2 = new ActionDescriptor();
        desc2.putUnitDouble(cTID("Hrzn")  cTID("#Pxl")  0);
        desc2.putUnitDouble(cTID("Vrtc")  cTID("#Pxl")  30);
        desc1.putObject(cTID("T   ")  cTID("Ofst")  desc2);
        executeAction(sTID("move")  desc1  dialogMode);
    }
    function step19(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        var desc1 = new ActionDescriptor();
        var ref1 = new ActionReference();
        ref1.putEnumerated(cTID("Dcmn")  cTID("Ordn")  cTID("Frst"));
        desc1.putReference(cTID("null")  ref1);
        desc1.putUnitDouble(cTID("Angl")  cTID("#Ang")  -90);
        executeAction(sTID("rotateEventEnum")  desc1  dialogMode);
    }
    function step20(enabled  withDialog) {
        if (enabled != undefined && !enabled) {
            return;
        }
        var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO;
        executeAction(sTID("flattenImage")  undefined  dialogMode);
    }
    step1();
    step2();
    step3();
    step4();
    step5();
    step6();
    step7();
    step8();
    step9();
    step10();
    step11();
    step12();
    step13();
    step14();
    step15();
    step16();
    step17();
    step18();
    step19();
    step20();
}
3.代码转执行
    
使用记事本或者notepad 等文本编辑器,将代码拷贝至文本文件,然后修改后缀名为js或者jsx,最后再PS软件菜单文件》脚本》浏览,点执行即可,也可以将脚本放在预设文件夹内,会显示再脚本下的二级子菜单。如下图所示:

PS脚本执行.png
4.作者答疑文章引用至 作者联系方式
文章引用至 插件开发流程 - 知乎




