Applescript Finder选择“Stuck”

时间:2011-05-28 22:29:34

标签: applescript selection finder image-events

我一直在使用下面的代码一段时间,通过我想要的各种壁纸尺寸自动神奇地缩放图像。今天早上,它停止了工作,并且给出了一些我见过的最离奇的行为。

如果我重启我的盒子,脚本会在第一次运行时按预期工作。之后,之前的选择似乎停留在Image Events内存中。我的意思是:

我有这个目录结构:

.
|-- 11
|   `-- Math.png
|-- 1610
|-- 169
|   `-- Math.png
|-- 43
|   `-- Math.png
|-- Math.jpg
`-- Math.png

我在Finder中选择了./169/Math.png重新启动后第一次运行脚本,并在Applescript Editor中获得以下结果:

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是在我呼叫open currentWallpaper as (alias)时打开的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 ,尽管在Finder选择中显示正确的壁纸。换句话说,它不像Finder坚持使用旧的选择,但是我正在循环的壁纸卡在旧的选项上。

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

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

剧本:

{{1}}

1 个答案:

答案 0 :(得分:1)

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

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"

打开的图像按名称引用。如果您打开另一个具有相同名称的图像,则返回的引用可能偶尔会引用先前打开的同名图像。

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

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