我已经使用下面的代码在我想要的各种壁纸大小中自动魔术地缩小图像了。今天早上,它停止工作,并给出了一些我见过的最奇怪的行为。
如果我重启机器,脚本在第一次运行时就能正常工作。在此之后,之前的选择似乎停留在图像事件内存中。我的意思是:
我有这样的目录结构:
.
|-- 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"请注意,当我调用open currentWallpaper as (alias)时,会打开之前选择的./169/Math.png,尽管在Finder选择中显示了正确的墙纸。换句话说,Finder并不是停留在旧的选择上,而是我正在循环的墙纸粘在了旧的墙纸上。
也许更奇怪的是,如果我移动我选择的旧墙纸,currentWallpaper引用也会随之移动!换句话说,即使我丢弃了旧的选择,脚本的输出也会报告它正在打开./.Trash中的选择。
只要名称不同,它似乎就不会被混淆。
脚本:
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发布于 2011-05-29 17:05:06
这个问题是由"Image Events“返回打开的图片的引用引起的:
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 tellhttps://stackoverflow.com/questions/6164731
复制相似问题