利用 Applescript 编程管理相册
在 macOS 上的「照片」App 中,通过智能相簿功能可以方便地管理照片。在创建智能相簿时,可以设定一系列规则,根据相机型号、拍摄日期等条件筛选照片,然后将这些照片添加到相册中。当相册中有新照片加入时,符合条件的照片也会自动添加到智能相簿中。
但是,目前智能相簿所支持的条件仍然有一定的局限性。例如,笔者想要筛选出来自 iPhone 6S 的照片,即使设置了相机型号规则,也还有大量的手机截屏没有被包含进来。造成问题的原因是手机截屏照片的 EXIF 中并不包含相机型号信息。如果需要筛选这些截屏,使用分辨率作为判断依据是更好的,可惜智能相簿目前还不支持对分辨率进行筛选。类似这样的需求还有很多,有没有办法通过自动化的方式进行处理呢?答案是肯定的,使用 Applescript 编程即可实现。
Applescript 是 macOS 系统自带的脚本语言,可以用于控制系统内置应用程序,实现自动化操作。对于「照片」App,Applescript 可以用于获取照片信息、创建相册、添加照片等操作。下面是一个简单的例子,用于筛选 iPhone 6S 的截屏照片,并将其添加到一个名为「iPhone 6S Screenshot」的相册中。
运行这段脚本的方法是,打开「脚本编辑器」App,将脚本粘贴到编辑器中,然后点击运行按钮。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38tell application "Photos"
log "Start..."
-- 创建一个新相册,如果相册已存在则使用现有相册
if not (exists album "iPhone 6S Screenshot") then
make new album named "iPhone 6S Screenshot"
end if
set targetAlbum to album "iPhone 6S Screenshot"
-- 定义目标分辨率
set targetWidth to 750
set targetHeight to 1334
-- 初始化图片列表
set imageList to {}
-- 获取所有照片
set allPhotos to every media item
-- 循环检查每张照片的分辨率
repeat with aPhoto in allPhotos
if width of aPhoto is targetWidth and height of aPhoto is targetHeight then
-- 打印照片的信息,例如文件名
log "Matching photo: " & filename of aPhoto & ", Date: " & date of aPhoto
-- 将符合分辨率的照片添加到列表
set end of imageList to aPhoto
end if
end repeat
-- 如果列表不为空,将照片添加到相册
if (count of imageList) > 0 then
-- 打印符合条件的照片数量
log "Number of matching photos: " & (count of imageList)
add imageList to targetAlbum
else
log "No matching photos found."
end if
end tell
如果一切顺利,脚本编辑器的输出窗口中会显示符合条件的照片信息。运行完成后,「照片」App 也会弹出提示,让用户确认操作。
这个例子只是一个简单的示例,实际应用中可以根据需求进行扩展,例如添加更多的筛选条件、自动化处理照片等。现有的大模型也可以帮助编写 Applescript 的代码。不过,在通过 Applescript 自动化操作其它 App 时,错误的代码逻辑可能会导致数据丢失,因此需要仔细检查代码并做好备份。