Applescript Finder选择“;";

Applescript Finder选择“;";,applescript,selection,finder,image-events,Applescript,Selection,Finder,Image Events,我使用下面的代码已经有一段时间了,它可以通过我想要的各种壁纸尺寸自动缩小图像。今天早上,它停止了工作,出现了我见过的最奇怪的行为 如果我重新启动我的机器,脚本在第一次运行时会按预期工作。之后,前面的选择似乎被卡在图像事件内存中。我的意思是: 我有以下目录结构: . |-- 11 | `-- Math.png |-- 1610 |-- 169 | `-- Math.png |-- 43 | `-- Math.png |-- Math.jpg `-- Math.png 重新启动后,我在

我使用下面的代码已经有一段时间了,它可以通过我想要的各种壁纸尺寸自动缩小图像。今天早上,它停止了工作,出现了我见过的最奇怪的行为

如果我重新启动我的机器,脚本在第一次运行时会按预期工作。之后,前面的选择似乎被卡在图像事件内存中。我的意思是:

我有以下目录结构:

.
|-- 11
|   `-- Math.png
|-- 1610
|-- 169
|   `-- Math.png
|-- 43
|   `-- Math.png
|-- Math.jpg
`-- Math.png
重新启动后,我在Finder中选择了./169/Math.png,第一次运行脚本,并在Applescript编辑器中得到以下结果:

tell application "Finder"
        get selection
                --> {document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk}
        get document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:Math.png"
end tell
tell application "Image Events"
        open alias "Paul:Users:tim:Downloads:test:169:Math.png"
                --> image "Math.png"
        get dimensions of image "Math.png"
                --> {2560, 1440}
        scale image "Math.png" to size 1920
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -1708
        «event ascrgdut»
                --> error number -1708
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1920x1080.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1920x1080.png"
        scale image "Math.png" to size 1366
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1366x768.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1366x768.png"
end tell
Result:
file "Paul:Users:tim:Downloads:test:169:Math_1366x768.png" of application "Image Events"
tell application "Finder"
        get selection
                --> {document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk}
        get document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:Math.png"
end tell
tell application "Image Events"
        open alias "Paul:Users:tim:Downloads:test:169:Math.png"
                --> image "Math.png"
        get dimensions of image "Math.png"
                --> {2560, 1440}
        scale image "Math.png" to size 1920
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -1708
        «event ascrgdut»
                --> error number -1708
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1920x1080.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1920x1080.png"
        scale image "Math.png" to size 1366
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1366x768.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1366x768.png"
end tell
Result:
file "Paul:Users:tim:Downloads:test:169:Math_1366x768.png" of application "Image Events"
tell application "Finder"
        get selection
                --> {document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk}
        get document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:Math.png"
end tell
tell application "Image Events"
        open alias "Paul:Users:tim:Downloads:test:169:Math.png"
                --> image "Math.png"
        get dimensions of image "Math.png"
                --> {2560, 1440}
        scale image "Math.png" to size 1920
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -1708
        «event ascrgdut»
                --> error number -1708
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1920x1080.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1920x1080.png"
        scale image "Math.png" to size 1366
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
tell application "Finder"
        get selection
                --> {document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk}
        get document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:Math.png"
end tell
tell application "Image Events"
        open alias "Paul:Users:tim:Downloads:test:169:Math.png"
                --> image "Math.png"
        get dimensions of image "Math.png"
                --> {2560, 1440}
        scale image "Math.png" to size 1920
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -1708
        «event ascrgdut»
                --> error number -1708
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1920x1080.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1920x1080.png"
        scale image "Math.png" to size 1366
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "169" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:169:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/169/Math_1366x768.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:169:Math_1366x768.png"
end tell
Result:
file "Paul:Users:tim:Downloads:test:169:Math_1366x768.png" of application "Image Events"
我在Finder中选择了./Math.png后再次运行脚本:

tell application "Finder"
        get selection
                --> {document file "Math.png" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk}
        get document file "Math.png" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:Math.png"
end tell
tell application "Image Events"
        open alias "Paul:Users:tim:Downloads:test:Math.png"
                --> image "Math.png"
        get dimensions of image "Math.png"
                --> {2560, 1440}
        scale image "Math.png" to size 1920
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/Math_1920x1080.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:Math_1920x1080.png"
        scale image "Math.png" to size 1366
        get name of image "Math.png"
                --> "Math.png"
        get name of image "Math.png"
                --> "Math.png"
        offset of "." in "Math.png"
                --> error number -10004
end tell
tell current application
        offset of "." in "Math.png"
                --> 5
end tell
tell application "Finder"
        get parent of document file "Math.png" of folder "test" of folder "Downloads" of folder "tim" of folder "Users" of startup disk
                --> alias "Paul:Users:tim:Downloads:test:"
end tell
tell application "Image Events"
        save image "Math.png" in "/Users/tim/Downloads/test/Math_1366x768.png" as PNG
                --> file "Paul:Users:tim:Downloads:test:Math_1366x768.png"
end tell
Result:
file "Paul:Users:tim:Downloads:test:Math_1366x768.png" of application "Image Events"
请注意,以前选择的
/169/Math.png
是我调用
打开currentWallpaper as(alias)
时打开的壁纸,尽管在Finder选择中显示了正确的壁纸。换句话说,Finder并不是停留在旧的选择上,而是我循环浏览的壁纸停留在旧的选择上

也许更奇怪的是,如果我移动我选择的旧墙纸,当前墙纸参考也会随之移动!换句话说,即使我丢弃了旧的选择,脚本的输出也会报告它正在打开。/.Trashes中的选择

只要名称不同,它似乎就不会混淆

剧本:

tell application "Finder" to set wallpapers to selection

set myDimensions to {w169:[{2560, 1440}, {1920, 1080}, {1366, 768}], w1610:[{2560, 1600}, {1920, 1200}, {1440, 900}, {1280, 800}], f43:[{1600, 1200}], s:[{1024, 1024}]}

tell application "Image Events"
    repeat with currentWallpaper in wallpapers
            set theWallpaper to open (currentWallpaper as alias)
            tell theWallpaper
                    set theWallpaperDimensions to dimensions of theWallpaper
                    set currentAspects to {}
                    if my aspectsEqual(16 / 10, theWallpaperDimensions) then set currentAspects to w1610 of myDimensions
                    if my aspectsEqual(16 / 9, theWallpaperDimensions) then set currentAspects to w169 of myDimensions
                    if my aspectsEqual(4 / 3, theWallpaperDimensions) then set currentAspects to f43 of myDimensions
                    if my aspectsEqual(1, theWallpaperDimensions) then set currentAspects to s of myDimensions
                    repeat with dim in currentAspects
                            -- Scale and Crop to current dimensions
                            if item 1 of theWallpaperDimensions is greater than item 1 of dim then
                                    scale to size (get item 1 of dim)

                                    -- Set up save target
                                    set namePrefix to text items 1 thru ((offset of "." in (get name)) - 1) of (get name) as string
                                    tell application "Finder"
                                            set _ to parent of currentWallpaper as alias
                                            set parentPath to POSIX path of _
                                    end tell
                                    set saveTarget to parentPath & namePrefix & "_" & (get item 1 of dim) & "x" & (get item 2 of dim) & ".png"

                                    --save to target
                                    save in saveTarget as PNG
                            end if
                    end repeat
            end tell
    end repeat
end tell

on aspectsEqual(baseAspect, wallpaperDimensions)
    set wallpaperAspect to (item 1 of wallpaperDimensions) / (item 2 of wallpaperDimensions)
    set aspectDifference to baseAspect - wallpaperAspect
    if aspectDifference is less than 0 then set aspectDifference to aspectDifference * -1
    return aspectDifference is less than 1.0E-3
end aspectsEqual

问题是由“图像事件”返回对已打开图像的引用的方式引起的:

open alias "Paul:Users:tim:Downloads:test:Math.png"
        --> image "Math.png"
open alias "Paul:Users:tim:Downloads:test:169:Math.png"
        --> image "Math.png"
打开的图像由名称引用。如果打开另一个同名图像,返回的引用可能偶尔会引用以前打开的同名图像

作为解决方法,在进入处理所选图像的循环之前,添加一个
关闭每个图像。此外,处理完打开的图像后,您需要关闭该图像:

tell application "Image Events"
    close every image
    repeat with currentWallpaper in wallpapers
        set theWallpaper to open (currentWallpaper as alias)
        tell theWallpaper
        ...
        end tell
        close theWallpaper
    end repeat
end tell

这似乎没有任何效果,尽管我同意这是一个更干净、值得一提的建议。但是,我仍然观察到
打开别名“foo:bar:fooAspectRatio:fooImage”
打开与第一次运行脚本相关联的图像。这是一个旧答案,但很好。我只是遇到了一个类似的问题,解决方法是确保在我处理完图像后关闭它,否则图像事件会从它第一次打开文件时就一直捕获信息。(我从一个文件中获取维度,并在同一个测试文件上运行脚本。)