Javascript Photoshop Extendscript:如何检查当前打开的文件并对某些文件名执行命令

Javascript Photoshop Extendscript:如何检查当前打开的文件并对某些文件名执行命令,javascript,photoshop,extendscript,Javascript,Photoshop,Extendscript,我在photoshop中一次打开了几个图像,但它们需要用文件名进行相应的检查并相应地保存。谢谢 例如: Name.SizexSize.png->添加1px边框->JPG 59kb->为web保存+无提示。Name.SizexSize.png->添加1px边框->JPG 39kb->为web保存+无提示。覆盖原件。 iPlayDialogs=DialogModes.NO var defaultRulerUnits = preferences.rulerUnits; preferences.rule

我在photoshop中一次打开了几个图像,但它们需要用文件名进行相应的检查并相应地保存。谢谢

例如:

Name.SizexSize.png->添加1px边框->JPG 59kb->为web保存+无提示。Name.SizexSize.png->添加1px边框->JPG 39kb->为web保存+无提示。覆盖原件。 iPlayDialogs=DialogModes.NO

var defaultRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;

if ((documents.length > 0) && (activeDocument.saved)){

var AD = activeDocument;
var initialFolder = activeDocument.path;

var docRef = activeDocument;

    var fileNameNoExtension = docRef.name;
    fileNameNoExtension = fileNameNoExtension.split( "." );
    if ( fileNameNoExtension.length > 1 ) {
        fileNameNoExtension.length--;
    }
    fileNameNoExtension = fileNameNoExtension.join(".");

var Filename = fileNameNoExtension; 

  AD.flatten();
  var docWidth = AD.width; 
  var docHeight = AD.height;
  var docRes = AD.resolution;


  var jpgOptns = new JPEGSaveOptions();
  jpgOptns.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
  jpgOptns.embedColorProfile = true;
  jpgOptns.matte = MatteType.NONE;
  jpgOptns = new JPEGSaveOptions;

  for(a=0+1;a<=5;a++){

    jpgSaveFile =  File(initialFolder+"/"+Filename+a+".jpg");
    jpgOptns.quality = 5;
AD.saveAs (jpgSaveFile ,jpgOptns , true, Extension.LOWERCASE);

  }

 while (app.documents.length) {
 app.activeDocument.close()
 }

  if(docWidth>docHeight){
  var multipW=1;
  var multipH=13;
  }else{
  var multipW=13;
  var multipH=1;
  }


 }else{

  alert("Either you have no document open or you haven't saved your 
  work anywhere prior to the script \nSave your document first !");

}
var defaultRulerUnits=preferences.rulerUnits;
preferences.rulerUnits=Units.PIXELS;
如果((documents.length>0)和(&(activeDocument.saved)){
var AD=activeDocument;
var initialFolder=activeDocument.path;
var docRef=activeDocument;
var filename noextension=docRef.name;
fileNameNoExtension=fileNameNoExtension.split(“.”);
如果(fileNameNoExtension.length>1){
fileNameNoExtension.length--;
}
fileNameNoExtension=fileNameNoExtension.join(“.”);
var Filename=fileNameNoExtension;
AD.flatte();
var docWidth=AD.width;
var docHeight=广告高度;
var docRes=平均分辨率;
var jpgOptns=新的JPEGSaveOptions();
jpgOptns.formatOptions=formatOptions.OPTIMIZEDBASELINE;
jpgOptns.embedColorProfile=true;
jpgOptns.matte=MatteType.NONE;
jpgOptns=新的JPEGSaveOptions;
对于(a=0+1;adocHeight){
var=1;
var=13;
}否则{
var=13;
var=1;
}
}否则{
警报(“您没有打开文档或未保存文档
在脚本之前的任何位置工作\n请先保存文档!);
}

要处理打开的文档,请循环查看
文档
对象,从名称中获取大小,我猜是这样的:

for (var i = 0; i < documents.length; i++) {
  activeDocument = documents[i]; //will change active document to one of the opened

  var docNameSize = activeDocument.name.split(".")[1].split("x"); //will get you [Size, Size] from Name.SizexSize.png;
  for (var k = 0; k < docNameSize.length; k++) docNameSize[k] = parseInt(docNameSize[k]); //will convert [Size, Size] to numbers
}
没有办法为save for web指定最大大小,但您可以使用类似的方法:它将以所需的质量(默认为75)保存jpg,并查看大小是否小于所需的大小。如果它更大,它将以更小的递归质量再次保存:

saveJPG(
{
    path: activeDocument.path,
    maxSize: 50 //size in kbs
})

function saveJPG(_data)
{
    if (_data.path == undefined) return false;
    _data.name = _data.name == undefined ? activeDocument.name : _data.name;
    _data.quality == undefined && _data.quality = 75;

    if (!new Folder(_data.path).exists)
    {
        alert("Output path doesn't exist!"); //you can add a function to create a path if needed
        return false
    }

    var options = new ExportOptionsSaveForWeb(),
        jpgFile = new File(_data.path + '/' + getName(_data.name) + '.jpg');

    options.format = SaveDocumentType.JPEG;
    options.quality = _data.quality;
    activeDocument.exportDocument(jpgFile, ExportType.SAVEFORWEB, options);

    if (_data.maxSize != undefined)
    {
        var ms = _data.maxSize * 1000;
        if (jpgFile.length > ms)
        {
            if (!jpgFile.remove())
            {
                alert('Save file is locked, please make sure it\'s not opened anywhere');
                return
            };
            saveJPG(
            {
                path: _data.path,
                name: _data.name,
                maxSize: _data.maxSize,
                quality: _data.quality - 2
            });
        }
    };

    function getName(fullName)
    {
        var temp = String(fullName).split("/"),
            fullName = temp.pop();
        return fullName.replace(/\.[^.]+$/g, "")
    };
};

你已经试过什么了?你到底需要什么帮助?或者你希望整个剧本都是为你写的?哈哈,当然不是。我需要能够检查当前在photoshop中以SizexSize打开的每个文件,然后继续导出设置。我在这里尝试了以下方法:@SergeyKritskiy代码已添加。;)。我想我需要用photoshop中当前打开的所有文档检查FIlename的字符串值。是否需要将此值指定给数组?如果文件名==300x600,则saveforweb 59KB:)非常感谢。这非常有帮助,将帮助我进一步学习正确的语法。我不太明白您是如何通过rgbh值指定白色的。我该怎么做才能让它变成黑色呢?脚本一次只能处理一个打开的图像。它似乎锁定了多个打开的文件。有没有可能在5打开的情况下运行它并通过它们运行?我在原始脚本中犯了一个错误:它有两个for循环,都带有
I
变量,我认为现在应该可以运行了。在
fillWithWhiteColor()
中,颜色通过HSB设置为黑色,使用
0
0
0
值。这段代码来自ScriptListener插件,该插件将photoshop命令转换为可执行的AM代码()脚本非常有效!!但它只处理第一个图像:(.当我试图更改desc36.putDouble(cTID('Brgh'),100.000000)的值时;出现了100到000个错误。这是一个调试窗口吗?!哈哈。对我来说,它适用于所有打开的文档。我不知道你做了什么修改,可能是它们导致脚本无法处理所有内容。
saveJPG(
{
    path: activeDocument.path,
    maxSize: 50 //size in kbs
})

function saveJPG(_data)
{
    if (_data.path == undefined) return false;
    _data.name = _data.name == undefined ? activeDocument.name : _data.name;
    _data.quality == undefined && _data.quality = 75;

    if (!new Folder(_data.path).exists)
    {
        alert("Output path doesn't exist!"); //you can add a function to create a path if needed
        return false
    }

    var options = new ExportOptionsSaveForWeb(),
        jpgFile = new File(_data.path + '/' + getName(_data.name) + '.jpg');

    options.format = SaveDocumentType.JPEG;
    options.quality = _data.quality;
    activeDocument.exportDocument(jpgFile, ExportType.SAVEFORWEB, options);

    if (_data.maxSize != undefined)
    {
        var ms = _data.maxSize * 1000;
        if (jpgFile.length > ms)
        {
            if (!jpgFile.remove())
            {
                alert('Save file is locked, please make sure it\'s not opened anywhere');
                return
            };
            saveJPG(
            {
                path: _data.path,
                name: _data.name,
                maxSize: _data.maxSize,
                quality: _data.quality - 2
            });
        }
    };

    function getName(fullName)
    {
        var temp = String(fullName).split("/"),
            fullName = temp.pop();
        return fullName.replace(/\.[^.]+$/g, "")
    };
};