Javascript 比较JPG文件与Photoshop图层

Javascript 比较JPG文件与Photoshop图层,javascript,photoshop,photoshop-script,Javascript,Photoshop,Photoshop Script,是否可以比较作为Photoshop图层导入的一组文件的文件名? 我有一个文件夹的50 jpg图像,我已经在PSD文件中使用。 现在我想检查是否使用了所有的JPG文件? 可以这样做吗?在Javascript中,可以使用库获取一些与PSD文件层相关的信息,正如我所说的,Photoshop脚本可以通过使用文件对象和基本Javascript知识来帮助您实现这一点。我已经按照您的要求修改了我的旧脚本,现在它可以很好地处理任何嵌套的组和图像 我强烈鼓励您学习脚本编写,并在任何感到困惑的地方提出问题 将下面的

是否可以比较作为Photoshop图层导入的一组文件的文件名? 我有一个文件夹的50 jpg图像,我已经在PSD文件中使用。 现在我想检查是否使用了所有的JPG文件?
可以这样做吗?

在Javascript中,可以使用库获取一些与PSD文件层相关的信息,正如我所说的,Photoshop脚本可以通过使用文件对象和基本Javascript知识来帮助您实现这一点。我已经按照您的要求修改了我的旧脚本,现在它可以很好地处理任何嵌套的组和图像

我强烈鼓励您学习脚本编写,并在任何感到困惑的地方提出问题

将下面的代码另存为“Script.jsx”,并从“文件>脚本>浏览”运行它

更新2:现在它会根据您的要求保存log.txt文件。另外,从这个脚本中学习并调整它以达到你想要的效果

// Managing Document
var docs = app.documents;

// Progress Bar
var win = new Window("window{text:'Progress',bounds:[100,100,400,150],bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");

// assigning activeDocument
if (docs.length != 0) {
    var docRef = app.activeDocument;

    // Defining the folder
    alert("You will be prompted for the folder containing your images.\n" +
        "Files will be selected with a '.png'/'.jpg/.jpeg' on the end in the same folder.");
    var folder = Folder.selectDialog();
    if (!folder) {
        exit;
    }

    var photoFiles = folder.getFiles(/\.(jpg|jpeg|png)$/i);
    var matchFiles = [];
    var photoFilesName = [];
    //Searching for used images
    var increment = parseFloat(0);
    var divider = parseFloat(100/photoFiles.length);
    win.show();
    for (var i = 0; i < photoFiles.length; i++) {
        increment = increment + divider;
        var indexPhotoName = removeExtension(photoFiles[i].displayName);
        photoFilesName.push(indexPhotoName);
        var doc = activeDocument;
        var curLayer;
        goThroughLayers(doc, indexPhotoName);
    }

    function goThroughLayers(parentLayer, targetName) {
        for (var i = 0; i < parentLayer.layers.length; i++) {
            curLayer = parentLayer.layers[i];
            doc.activeLayer = curLayer;
            if (curLayer.typename == 'LayerSet') {
                goThroughLayers(curLayer, targetName)
            } else {
                if (curLayer.name == targetName) {
                    // if (curLayer.name.match(/[e]/ig)) {
                        matchFiles.push(targetName);
                    // }
                } //end if
            } //end else
        } //end loop
    } //end function


    function arr_diff(a1, a2) {
        var a = [],
            diff = [];
        for (var i = 0; i < a1.length; i++) {
            a[a1[i]] = true;
        }
        for (var i = 0; i < a2.length; i++) {
            if (a[a2[i]]) {
                delete a[a2[i]];
            } else {
                a[a2[i]] = true;
            }
        }
        for (var k in a) {
            diff.push(k);
        }
        return diff;
    }

    function removeExtension(str) {
        return str.split('.').slice(0, -1).join('.');
    }

    var missItems = arr_diff(matchFiles, photoFilesName);
    if (missItems.length > 0) {
        var missFolder = new Folder(photoFiles[0].path + '/Missed%20Files');
        if(!missFolder.exists){
            missFolder.create();
        }
        for (var y = 0; y < photoFiles.length; y++) {
            var photoTrimName = removeExtension(photoFiles[y].displayName);
            for( var x = 0; x < missItems.length ; x++){
                if(photoTrimName == missItems[x]){
                    photoFiles[y].copy(new File(missFolder+'/'+photoFiles[y].displayName));
                }
            }
        };
        win.close();
        alert("You've missed total " + missItems.length + " files. Press OK to open folder containing missing files. Log report is generated wherever PSD is saved.");
        var FileStr = "";
        for(var m=0; m<missItems.length; m++){
            FileStr = FileStr + '\n' + (m+1) + '. ' + missItems[m];
        }
        var str = "Your missed files are : " + FileStr;
        saveTxt(str);
        missFolder.execute();
    } else {
        win.close();
        saveTxt('All Photos are used');
        alert('All Photos are used');
    }
} else {
    alert('Open atleast one document');
}

function saveTxt(txt)
{
    var Name = "LogReport_" + app.activeDocument.name.replace(/\.[^\.]+$/, '');
    var Ext = decodeURI(app.activeDocument.name).replace(/^.*\./,'');
    if (Ext.toLowerCase() != 'psd')
        return;

    var Path = app.activeDocument.path;
    var saveFile = File(Path + "/" + Name +".txt");

    if(saveFile.exists)
        saveFile.remove();

    saveFile.encoding = "UTF8";
    saveFile.open("e", "TEXT", "????");
    saveFile.writeln(txt);
    saveFile.close();
}
//管理文档
var docs=app.documents;
//进度条
var win=new Window(“Window{text:'Progress',bounds:[100100400150],bar:Progressbar{bounds:[20,20280,31],value:0,maxvalue:100};”;
//分配活动文档
如果(docs.length!=0){
var docRef=app.activeDocument;
//定义文件夹
警报(“系统将提示您输入包含图像的文件夹。\n”+
“将在同一文件夹中选择末尾带有“.png'/'.jpg/.jpeg”的文件。”);
var folder=folder.selectDialog();
如果(!文件夹){
出口
}
var photoFiles=folder.getFiles(/\(jpg | jpeg | png)$/i);
var matchFiles=[];
var photoFilesName=[];
//搜索使用过的图像
var增量=parseFloat(0);
var divider=parseFloat(100/photoFiles.length);
win.show();
对于(var i=0;i0){
var missFolder=新文件夹(照片文件[0]。路径+'/缺少%20Files');
如果(!missFolder.exists){
missFolder.create();
}
对于(变量y=0;y对于(var m=0;mYou可以使用
Folder(path).getFiles('*.jpg')
来获取所有jpg文件,这样您就可以通过按来创建一个包含所有文件名而不带扩展名的数组。然后,您可以使用if条件来验证具有特定名称的层是否存在或与
app.activeDocument.layers.getByName(i)类似
。这是如何通过Photoshop脚本完成的。我是脚本或编码方面的高手。你能帮我做一个吗?我可以帮你,但我需要确切地知道你想做什么。我的意思是psd中有什么类型的层结构。最好共享一个包含你的层和你的问题的图像,以便我可以创建工作脚本。Thx先生在线好的。这是一个场景:我有一个文件夹,里面有100张图片。我做了一个设计,其中我使用了所有的100张图片。但是我不确定我是否使用了所有的100张图片(在设计图片中)。因此,我需要一个脚本,将文件夹中的100个图像与我创建的PSB文件中的100个层进行比较。如果PSB图像中缺少任何图像,它应该通知该图像。规则是,所有100个图像都应用于设计。PS:这些图像不会在PSB图像中重复,它们将使用一次。这可以重复吗一个?层结构也可以是随机的。唯一关心的是文件中是否使用了这100幅图像。我没有太多时间,所以脚本很粗糙。希望它能帮助我感谢这位在线先生。我检查了它,但它显示了错误,尽管使用了所有PNG文件。我如何向您发送错误的屏幕截图?您可以上传广告到临时图像存储网站,然后在评论中发布链接。正如我所说,这是非常基本的,可能会出现错误。我可以自定义它为无错误,但我有很多繁忙的日程安排2天。你也可以通过电子邮件联系我,你可以在我的个人资料中看到它,但我不认为我能在2天内修复它。我刚刚发现你想要jpg在而不是巴布亚新几内亚。