这是一种JavaScript(不是我的JavaScript),可以按照字母和数字顺序将图像导入到Photoshop中。
脚本运行时:
-用户选择要导入Photoshop的图像文件夹。
-然后按字母和数字顺序导入图像。例如:
a.01.png,b.01.png,c.01.png,a.02.png,b.02.png,c.02.png,a.03.png, b.03.png,c.03.png ..etc。
脚本运行良好,直到结束。它总是无法从最后一个数值集中获取一张图像。 EX失败:
a.01.png,b.01.png,c.01.png,a.02.png,b.02.png,c.02.png,
“跳过此处即可进入a.03.png”
b.03.png,c.03.png
无论有多少组,最后一组总是无法导入一个图像。其余进口罚款。我还无法弄清楚是什么原因造成的。有人能在下面的脚本中找到问题吗?
我没有提到这是更大的JavaScript中的一段代码,因此PSDcreate和其他项目在其他地方使用。我只是裁掉了失败的部分,因为原始部分太大而无法发布。我运行了您创建的脚本,它确实将它们引入,但与我在我的代码中所做的完全不同。我相信您会带来图片
a.00.1png,a.002.png,a.003.png b.001.png,b.002.png,b.003.png,c.001.png,c.002.png,c .003.png ... ect
我正在使用的那个按
的顺序放置a.001.png,b.001.png,c.001.png,a.002.png,b.002.png,c.002png ...等
我首先将以.001结尾的a,b,c图像导入到Photoshop中。然后在那一点上,我取出的代码然后按顺序(a,b,c)堆叠图像并执行其他各种任务。完成后,将它们另存为PSD文件“ name.001.psd”。然后,脚本引入带002的下一组图像,并循环重复该过程。那是我删除的部分,因为它的代码太多,而且似乎不是问题。
是否可以带来图像.001的a,b,c,然后是.002..etc的a,b,c?
代码:
#target photoshop
app.bringToFront();
// Dialog for user to choose folder of documents to process
var inputFolderArray = [];
do {
var inputFolder = Folder.selectDialog("Select a folder of documents to process");
if(inputFolder != null) {
inputFolderArray.push(inputFolder);
}
}
while(inputFolder != null
|| inputFolder != undefined)
// Pulls images from inputFolder
for (var j = 0; j < inputFolderArray.length; j++) {
var filesList = inputFolderArray[j].getFiles();
var outputDirectory = inputFolderArray[j] + '/';
// Sort the order of files corresponding to the number
filesList.sort(function(x,y) {
// the substr gets the numbers (ex: get "01" from image.01.png)
var xp = (x.name).substr(-6, 2);
var yp = (y.name).substr(-6, 2);
return parseInt(xp) - parseInt(yp);
});
var frameArrays = [[]];
var oldFrameNum = (filesList[0].name).substr(-6, 2);
// These are used for array slice
var arrayStartNum = 0;
var arrayEndNum = 1;
// Put each frame into separate array
for (var i = 1; i < filesList.length; i++) {
var currentFrameNum = (filesList[i].name).substr(-6, 2);
if(oldFrameNum !== currentFrameNum) {
oldFrameNum = currentFrameNum;
frameArrays[0].push(filesList.slice(arrayStartNum, i));
arrayStartNum = i;
arrayEndNum = i-1;
}
else if(i === filesList.length-1) {
frameArrays[0].push(filesList.slice(arrayStartNum, i));
}
}
for (var i = 0; i < frameArrays[0].length; i++) {
// Sort the file order alphabetically
sorter = MySort('*!@_.()#^&%-=+01234567989abcdefghijklmnopqrstuvwxyz');
frameArrays[0][i].sort(sorter)
PSDCreate(frameArrays[0][i], outputDirectory);
}
}
// FUNCTIONS BELOW//
function PSDCreate(frameArrays, outputDirectory) {
directory = outputDirectory + '/';
//var outputLocation = inputFolder + "/" + directory;
var outputFileName = '';
if (frameArrays != null) {
// Get all the files in the folder
var fileList = frameArrays;
var k = 0;
for (var i = 0; i < fileList.length; i++) {
if (fileList[i] instanceof File && fileList[i].hidden == false) {
var fileName = fileList[i].name;
var docRef = open(fileList[i]);
if(k == 0) {
k++;
outputFileName = RemoveExtension(docRef.name);
}
}
}
}
}
// Removes extension from file name
function RemoveExtension(name) {
var fileNameNoExtension = name;
fileNameNoExtension = fileNameNoExtension.split(".");
if ( fileNameNoExtension.length > 1 ) {
fileNameNoExtension.length--;
}
fileNameNoExtension = fileNameNoExtension.join(".");
return fileNameNoExtension;
}
// Sort the file order alphabetically with special characters
function MySort(alphabet)
{
return function(a, b) {
var index_a = alphabet.indexOf(a[0]),
index_b = alphabet.indexOf(b[0]);
if (index_a === index_b) {
// same first character, sort regular
if (a < b) {
return -1;
} else if (a > b) {
return 1;
}
return 0;
} else {
return index_a - index_b;
}
}
}
答案 0 :(得分:0)
我无法弄清楚为什么丢失了一个数组元素:您的排序令我很困惑,所以我重新编写了排序,我认为它更容易阅读。我首先从文件路径(前缀,数字)中提取需要排序的所有信息,然后将其放入一个临时数组(以及以后需要打开此路径的所有信息)。我按前缀和数字对该数组排序。我还用PSDCreate
替换了app.open
,因为问题在于按特定顺序打开文件,PSDCreate
包含很多无关信息。
var filesArray = [],
parsedFilesArray = [];
// Dialog for user to choose folder of documents to process
var inputFolderArray = [];
do {
var inputFolder = Folder.selectDialog("Select a folder of documents to process");
if (inputFolder != null)
{
inputFolderArray.push(inputFolder);
}
}
while (inputFolder != null ||
inputFolder != undefined)
// create an array of objects to sort it later based on files from InputFolder
for (var j = 0; j < inputFolderArray.length; j++)
{
var filesList = inputFolderArray[j].getFiles();
for (var i = 0; i < filesList.length; i++)
{
//extracting values for an object: [1] == path, [2] == name, [3] == number;
var fileString = String(filesList[i]).match(/(.*)(?:\/)(.*?)\.(\d*)\.(.*)/);
parsedFilesArray.push(
{
key: fileString[2], //filename
num: fileString[3], //01
path: fileString[1], // c/path/to/file/
file: [fileString[2], fileString[3], "png"].join(".") // filename.01.png
})
}
}
//sorting the array
parsedFilesArray.sort(function(a, b)
{
if (a.key === b.key)
{
return parseInt(a.num) - parseInt(b.num);
}
return a.key > b.key ? 1 : -1;
})
//opening files from the sorted array
for (var i = 0; i < parsedFilesArray.length; i++)
{
app.open(new File(parsedFilesArray[i].path + "/" + parsedFilesArray[i].file))
}