Adobe Photoshop Extension打开“另存为”对话框

时间:2019-07-01 07:58:37

标签: javascript adobe

我是一名开发人员,正在为Adobe Photoshop编写脚本,以便能够使用以下代码打开“另存为...”的photoshop本机窗口:

var jpgFile = new File(" ");
var jpgSaveOptions = new JPEGSaveOptions();
var doc = app.activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);

此代码可在Windows 10和MacOS的所有版本的Photoshop上运行,但在MacOS上的 Photoshop版本19.1.8 除外,在此我得到以下错误:

  

致命错误:发生一般的Photoshop错误。此功能可能   在此版本的Photoshop中不可用。

我尝试了几件事,例如用空白字符串替换新File对象中的空间,文件的硬编码路径,但似乎无济于事。 我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不确定为什么在其他版本中保存一个空的File会显示一个Save As对话框,我希望得到同样的错误消息:/无论如何,您可以做两件事。

  • 设置Photoshop选项以在保存文档之前始终显示对话框,然后设置默认值:

    var curDialogModes = app.displayDialogs; //current displayDialogs options
    app.displayDialogs = DialogModes.ALL; //explicitely show all dialogs
    
    var jpgFile = new File(Folder.desktop + "/file.jpg");
    var jpgSaveOptions = new JPEGSaveOptions();
    try
    {
        var doc = app.activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);
    }
    catch (e)
    {
        if (e.number != 8007)
        //8007 is a code for "operation cancelled"
        //so we only show a message if something else has happened
        {
            alert(e);
        }
    }
    
    app.displayDialogs = curDialogModes // restoring displayDialogs back to original value
    
  • 使用动作管理器代码(您可以从ScriptListener插件中获取代码)并将DialogModes.NO更改为DialogModes.ALL只是为了该功能-在这种情况下,您无需全局更改它,而仅针对这个动作。

    function saveJPG(path)
    {
        var desc9 = new ActionDescriptor();
        var desc10 = new ActionDescriptor();
        desc10.putInteger(charIDToTypeID('EQlt'), 10);
        desc10.putEnumerated(charIDToTypeID('MttC'), charIDToTypeID('MttC'), charIDToTypeID('None'));
        desc9.putObject(charIDToTypeID('As  '), charIDToTypeID('JPEG'), desc10);
        desc9.putPath(charIDToTypeID('In  '), new File(path));
        desc9.putInteger(charIDToTypeID('DocI'), 400);
        desc9.putBoolean(charIDToTypeID('Cpy '), true);
        desc9.putEnumerated(stringIDToTypeID('saveStage'), stringIDToTypeID('saveStageType'), stringIDToTypeID('saveBegin'));
        try
        {
            executeAction(charIDToTypeID('save'), desc9, DialogModes.ALL); // here the default DialogModes is DialogModes.NO
        }
        catch (e)
        {
            if (e.number != 8007)
            //8007 is a code for "operation cancelled"
            //so we only show a message if something else has happened
            {
                alert(e);
            }
        }
    }
    
    saveJPG(Folder.desktop + "/file.jpg")
    

请注意,在显示对话框时,取消对话框将引发错误,代码为8007,因此请使用try / catch进行处理。