欢迎光临散文网 会员登陆 & 注册

解决psd文件过大,制作一个ps清理元数据的脚本

2020-10-14 14:06 作者:Nad_H  | 我要投稿


课     目: 清理照片元数据的脚本

目     的: 不加班!

要     求: 互帮互助 共同提高

内     容: 

              1.新建记事本

              2.复制以下代码(B站复制最后一行会出现水印记得删除)

              3.粘贴并保存

              4.更改记事本文件后缀改为.jsx(如果不显示后跳转文章最后)

Ding ~  : 完成脚本

常见问题:

1.如果提示代码丢失,要将文本另存为,设置编码格式为utf-8




function deleteDocumentAncestorSMetadata() {

    if(String(app.name).search("Photoshop") > 0) {


        if(!documents.length) {

            alert("There are no open documents. Please open a file to run this script.")

            return;

        }


        if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");


        var xmp = new XMPMeta( activeDocument.xmpMetadata.rawData);

        xmp.deleteProperty(XMPConst.NS_PHOTOSHOP, "DocumentAncestors");

        app.activeDocument.xmpMetadata.rawData = xmp.serialize();


        clearDocumentAncestorsForAllLayers(app.activeDocument);


        if (app.activeDocument !== mainDocument) {

            app.activeDocument.close(SaveOptions.SAVECHANGES);

        }else{

            app.activeDocument.save();

        }

    }

}


function clearDocumentAncestorsForAllLayers(doc) {

    try {


        if (doc == undefined) {

            return;

        }


        for (var i = 0; i < doc.layers.length; i++) {

            var curLayer = doc.layers[i];

            if (curLayer.typename != "ArtLayer") {

                clearDocumentAncestorsForAllLayers(curLayer);

                continue;

            }


            if (curLayer.kind == "LayerKind.SMARTOBJECT") {


                app.activeDocument.activeLayer = curLayer;

                

                var idplacedLayerEditContents = stringIDToTypeID("placedLayerEditContents");

                var actionDescriptor = new ActionDescriptor();

                executeAction(idplacedLayerEditContents, actionDescriptor, DialogModes.NO);


                if(app.activeDocument.activeLayer == curLayer){

                    continue;

                }

                deleteDocumentAncestorSMetadata()

                layerSetStr += ("\n"+curLayer.name)


            }

        }

    } catch (e) {

        alert("Layer clean fail.name="+doc+";e="+e)

    }

}


var layerSetStr = "";

var mainDocument = app.activeDocument;

function start(){

    deleteDocumentAncestorSMetadata();

    alert("Clean finished.\n[doc name]:"+mainDocument.name+"\n[layer set]:"+layerSetStr);

}


try{

    if(confirm("Start to clean?")){

        start();

    }

} catch (e) {

    alert("Clean fail.e="+e)

}


代码来源于网络

更改记事本文件后缀改为.jsx

使用方法

方案1:直接拖拽文件到ps的菜单栏执行

方案2:文件 → 脚本 → 浏览



扩展:

显示扩展名(后缀)的方法:https://www.bilibili.com/read/cv7950202



解决psd文件过大,制作一个ps清理元数据的脚本的评论 (共 条)

分享到微博请遵守国家法律