Adobe Photoshop Extension 打开另存为对话框
Adobe Photoshop Extension Open save As dialog
我是一名开发人员,正在为 Adobe 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 来处理它。
我是一名开发人员,正在为 Adobe 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 来处理它。