Adobe Photoshop Extension 打开另存为对话框

Adobe Photoshop Extension Open save As dialog

我是一名开发人员,正在为 Adob​​e Photoshop 编写脚本,以便能够使用以下代码打开 "Save As.." 的 photoshop native window:

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

此代码适用于所有版本的 Photoshop Windows 10 和 MacOS,除了 MacOS 上的 Photoshop 版本 19.1.8,我得到以下错误:

Fatal Error: General Photoshop error occurred. This functionality may not be available in this version of Photoshop.

我尝试了一些方法,比如用空白字符串替换新文件对象中的 space,这是文件的硬编码路径,但似乎没有任何效果。 非常感谢任何帮助。

我不确定为什么保存空 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
    
  • 使用 Action Manager 代码(您可以从 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 来处理它。