如何在 macOS 预览应用程序中使用 JavaScript for Automator (JXA) 保存图像?

How can an image be saved with JavaScript for Automator (JXA) in macOS Preview application?

预览应用程序中打开了一张图片,但未保存。

我已经通过在脚本编辑器中构建和 运行 独立脚本来尝试此代码:

var preview = Application('Preview')
var preview.documents[0].close({ saving: true, savingIn: '/Volumes/USB Drive/Untitled-Image.png' })

我在日志中看到了这个

app = Application("Preview")
    app.documents.at(0).Symbol.toPrimitive()
        --> Error -1700: Can't convert types.
    app.documents.at(0).Symbol.toPrimitive()
        --> Error -1700: Can't convert types.

但是,我不确定自己是否正确阅读了文档,也不确定如何进一步调试此代码。一个令人满意的替代方法是发送击键进行保存,然后单击“保存”按钮。

如何将预览中的图像保存到文件中?

可以使用 Path('...') 在 JavaScript 中推测性地声明路径,然后使用 save 命令将图像保存到将在该路径创建的文件中:

Preview = Application('com.apple.Preview');
ImageFilepath = Path('/Users/CK/Pictures/Preview_SavedImage.jpg');
Preview.documents[0].save({ in: ImageFilepath });

这段代码对我有用。

var preview = Application('Preview')
var photo = preview.documents[0]
photo.close({ saving: 'yes', savingIn: Path("/Path/To Some/file_name.png") })

执行后,在脚本编辑器的回复日志中 window,会记录一些与问题样本略有不同的内容。

app = Application("Preview")
    app.close(app.documents.at(0), {savingIn:Path("/Path/To Some/file_name.png"), saving:"yes"})

我通过研究其中的 scripting dictionary for macOS Mojave 10.14 as well as the Release Notes for JXA; there is a similar example under Passing Event Modifiers 部分弄明白了这一点。

来自脚本编辑器脚本字典,这是标准套件中 close 方法的条目:

close method : Close a document.
  close specifier : the document(s) or window(s) to close.
    [saving: "yes"/‌"no"/‌"ask"] : Should changes be saved before closing?
    [savingIn: File] : The file in which to save the document, if so.

请注意此处的工作代码与问题中的代码之间的主要区别:

  1. savingIn 选项传递给 close 时指定 Path object
  2. 将保存选项指定为 "yes"、"no" 或 "ask"(不是 true)之一。

如果您是 JXA、Automator、and/or Mac 脚本编辑器的新手,请查看 JXA Cookbook

如果这个答案对您有帮助,那么您可能过得很不开心,祝您好运!