我想清理我的照片库,特别是将我的所有iPhone屏幕截图移动到新专辑中,这样我就可以轻松浏览它们并删除我想要的内容。
现在为此我首先想在照片中制作智能相册,但似乎照片无法过滤图像的尺寸,所以我启动了AppleScript编辑器:)。
我创建了以下脚本,该脚本适用于"测试专辑"我创建了:
tell application "Photos"
set source_album_name to "Test Album"
set target_album_name to "Screenshots"
set target_width to 640
set target_height to 1136
if not (exists container named target_album_name) then
make new album named target_album_name
end if
set target_album to container target_album_name
set source_album to container source_album_name
set imageList to {}
repeat with photo in media items in source_album
if width of photo = target_width and height of photo = target_height then
set the end of imageList to photo
end if
end repeat
add imageList to target_album
end tell
此脚本循环显示名为Test Album
的相册,并将高度和宽度与iPhone 5S的尺寸进行比较。匹配时,会将照片添加到Screenshots
库中。没问题。
现在我想在整个照片集上运行此脚本,因此我将行repeat with photo in media items in source_album
更改为repeat with photo in every media item
。
一旦超过第一个项目Photos got an error: Can’t get item 2 of every media item. Invalid index
),就会生成错误。
之后我将代码更改为:
set all_images to every media item
repeat with photo in all_images
但加载一段时间后,脚本以代码-10000退出,可能是因为该库中的照片数量(27.000)。
有没有办法翻阅像这样的集合?
编辑:更改set
行以包含更好的查询会产生相同的效果,从而导致AppleEvent handler failed
的错误编号为-10000
。
set all_images to every media item whose width = target_width and height = target_height
答案 0 :(得分:3)
-10000错误是由于照片1.0中的错误造成的。我已将此作为雷达20626449(在http://openradar.appspot.com/radar?id=6090497735000064的OpenRadar上)提交给Apple。该错误是间歇性的,但库中的照片越多,在任何给定的脚本命令上发生的可能性就越大。
没有完全可靠的方法来解决错误,但有一件事似乎有帮助,如果在启动脚本之前在照片中选择了“所有照片”相册。不幸的是,Photos AppleScript套件无法选择相册,因此您需要在启动脚本之前手动执行此操作。
答案 1 :(得分:0)
不确定你是否介意在终端中放入shell,或者你是否可以使用iPhoto,但是如果可以的话,这可能会让你开始寻找你的HOME目录及其下面的所有文件,即{ {1}} s和您的尺寸匹配......
PNG
<强>输出强>
#!/bin/bash
isIphone() {
# Get width using sips, don't bother getting height if not 640 wide
w=$(sips -g pixelWidth "$1" | awk 'END{print $2}')
[ "$w" != "640" ] && return
# Get height using sips, just return if not iPhone size
h=$(sips -g pixelHeight "$1" | awk 'END{print $2}')
[ $h != "1136" ] && return
# Output image size and name
echo $w,$h, $1
}
# Go through all PNG files in HOME directory listing iPhone-sized ones
find ~ -iname "*.png" -type f -print0 | while read -d $'\0' -r file ; do isIphone "$file"; done