【问题标题】:Photoshop Script Processing Images Out of OrderPhotoshop 脚本乱序处理图像
【发布时间】:2019-01-27 17:28:39
【问题描述】:

我正在通过 Photoshop 的脚本工具/选项运行 javascript,以批处理图像文件夹。该脚本将第二个图像层从文件夹 02 中的单个图像添加到文件夹 01 中的多个图像中。效果很好,但是,我正在尝试减少添加的图层的不透明度,以便添加的图像对于从文件夹 01 处理的每个后续图像,从文件夹 02 开始变得越来越透明。我基本上是在创建一个淡入淡出,从文件夹 02 中的图像过渡到从文件夹 01 处理的图像。不透明度变化正在按预期发生(减少不透明度对于每个处理过的图像);然而,它们似乎被乱序处理,所以当我按顺序查看图像时,添加的图层的不透明度会跳来跳去。我还可以看到,当新处理的图像保存到处理后的图像文件夹时,它们会乱序到达(类似于 1、3、2、5、6、4;尽管每次可能不同)。我怀疑我需要强制我的代码按顺序一次处理一个图像,但我不知道该怎么做。提前致谢!我不认为文件命名是问题,因为我尝试将文件夹 01 中的图像命名为 1、2、3(等等)以及 01、02、03。但这没有帮助。

提前致谢!

#target photoshop
// FOLDERS
var folder1 = new Folder('~/Desktop/1/');
var folder2 = new Folder('~/Desktop/2/');
var saveFolder = new Folder('~/Desktop/done/');
//
var searchMask = '*.???'; // get files named as this
var list1 = folder1.getFiles(searchMask);
var list2 = folder2.getFiles(searchMask);
var psdOptions = new PhotoshopSaveOptions();
psdOptions.layers = true;
opacityLevel = 100;


for (var i = 0; i < list1.length; i++) {
var doc = open(list1[i]);
var docName = doc.name;

placeFile('~/Desktop/2/1.jpg', 100); // for adding only one file each source file
doc.activeLayer.blendMode = BlendMode.LIGHTEN; // @@ change BLEND MODE

placeFile('~/Desktop/2/2.png', 100); // for adding only one file each source file
doc.activeLayer.blendMode = BlendMode.MULTIPLY; // @@ change BLEND MODE

doc.activeLayer.opacity = opacityLevel; // set layer opacity

// Decrement opacity level for each image
if (doc.activeLayer.opacity > 5) {  
    opacityLevel = Math.round(doc.activeLayer.opacity) - 5;
    } 

// SAVING
doc.saveAs(new File(saveFolder + '/' + docName.split('.')[0] + '.psd'), psdOptions);
doc.close(SaveOptions.DONOTSAVECHANGES);
};

function placeFile(file, scale) {
    try {
    var idPlc = charIDToTypeID("Plc ");
    var desc2 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    desc2.putPath(idnull, new File(file));
    var idFTcs = charIDToTypeID("FTcs");
    var idQCSt = charIDToTypeID("QCSt");
    var idQcsa = charIDToTypeID("Qcsa");
    desc2.putEnumerated(idFTcs, idQCSt, idQcsa);
    var idOfst = charIDToTypeID("Ofst");
    var desc3 = new ActionDescriptor();
    var idHrzn = charIDToTypeID("Hrzn");
    var idPxl = charIDToTypeID("#Pxl");
    desc3.putUnitDouble(idHrzn, idPxl, 0.000000);
    var idVrtc = charIDToTypeID("Vrtc");
    var idPxl = charIDToTypeID("#Pxl");
    desc3.putUnitDouble(idVrtc, idPxl, 0.000000);
    var idOfst = charIDToTypeID("Ofst");
    desc2.putObject(idOfst, idOfst, desc3);
    var idWdth = charIDToTypeID("Wdth");
    var idPrc = charIDToTypeID("#Prc");
    desc2.putUnitDouble(idWdth, idPrc, scale);
    var idHght = charIDToTypeID("Hght");
    var idPrc = charIDToTypeID("#Prc");
    desc2.putUnitDouble(idHght, idPrc, scale);
    var idAntA = charIDToTypeID("AntA");
    desc2.putBoolean(idAntA, true);
    executeAction(idPlc, desc2, DialogModes.NO);

    }
    catch (e) { }
}//end function placeFile  

【问题讨论】:

    标签: javascript photoshop photoshop-script decrement


    【解决方案1】:

    永远不要指望文件列表函数来维护逻辑顺序...

    在创建文件列表后尝试对其进行排序。

    var list1 = folder1.getFiles(searchMask);
    var list2 = folder2.getFiles(searchMask);
    list1.sort();
    list2.sort();
    

    确保文件名按 ascibetly 排序。 Zerofix 如果你使用数字。

    或者,您可以为Array.sort() 提供排序功能以允许自定义排序。阅读更多关于它是如何工作的here

    【讨论】:

    • 这是一个奇妙而简单的解决方案!非常感谢。
    猜你喜欢
    • 2013-10-23
    • 2011-01-10
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多