You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JXA从Apple Photos导出照片?解决类型转换错误

解决JXA调用Photos导出图片的“Can't convert types”错误

问题根源分析

你遇到的-1700类型转换错误,主要由三个问题导致:

  • 错误启用标准添加:Photos.includeStandardAdditions = true无效,includeStandardAdditions属于脚本宿主(当前JXA运行环境)而非Photos应用,启用后才能正确处理路径类型转换。
  • 参数传递格式错误:Photos的export方法在JXA中的调用格式不符,不需要把导出列表放在export键下。
  • 目标路径类型不符合要求:需要将POSIX路径转换为Photos能识别的folder类型对象,而非直接用Path()创建的对象。

修正后的代码

const posix_path = "/Users/erik/dev/temp/"
// 获取当前脚本宿主并启用标准添加
const app = Application.currentApplication()
app.includeStandardAdditions = true

const Photos = Application("Photos")
// 将POSIX路径转换为Photos可识别的folder对象
const destination = app.pathTo(posix_path)

const matchingPhotos = Photos
    .search({for: "ravens"})
    .filter(x => x.filename().match(/(jpeg|jpg|heic)$/i))

if (matchingPhotos.length > 0) {
    const randomPhoto = matchingPhotos[Math.floor(Math.random() * matchingPhotos.length)]
    
    // 导出整个列表的正确调用格式
    Photos.export(matchingPhotos, { to: destination })
    
    // 导出单张图片的写法(直接传入单个MediaItem)
    // Photos.export(randomPhoto, { to: destination })
    
    console.log("导出完成")
} else {
    console.log("未找到匹配的图片")
}

关键修改说明

  • 启用标准添加:通过Application.currentApplication()获取脚本宿主,启用includeStandardAdditions后,才能使用pathTo()方法将POSIX路径转换为Apple事件兼容的文件/文件夹对象。
  • 修正export调用格式:JXA中Photos.export()的第一个参数是要导出的媒体项(单个或列表),第二个参数是包含to、usingOriginals等选项的对象,不需要用export键包裹导出列表。
  • 路径类型转换:app.pathTo(posix_path)会将POSIX路径转换为Photos要求的folder类型,避免类型不匹配错误。

额外注意事项

  • 如果需要导出原始文件,可在选项中添加usingOriginals: true,例如:
    Photos.export(matchingPhotos, { to: destination, usingOriginals: true })
    
  • JXA的Photos相关文档确实较少,可通过AppleScript字典反向推导JXA的调用逻辑(AppleScript与JXA的Apple事件调用逻辑基本一致,仅语法不同)。

内容的提问来源于stack exchange,提问作者heckman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:43:14