首先,这是我第一次尝试使用applescript,所以请耐心等待:)
我正在努力实现的目标:我使用Dropbox作为在线存储图片的方式。我几乎使用了所有可用空间,但今天我意识到通过简单的jpgs无损优化,我可以节省高达35-40%的空间(我使用应用程序优化了所有内容)。所以我的想法是:因为我的mac上的dropbox每次都在后台运行,如果我添加一些东西(或从手机上传相机),图片最终会到达我的mac中的文件夹,所以,也许,我可以监控该文件夹,自动优化图片并再次上传,因为就DP而言,图片是不同的,我最终会自动优化图片。
到目前为止的步骤:
找一个CLI来优化图像✔️
根据文件夹创建服务,该文件夹每次在文件夹中发生更改时运行✔️
优化图片✔️
完成后显示通知✔️
automator脚本如下所示(暂时附加到测试文件夹):
on run {input, parameters}
tell application "Terminal"
activate
do script with command "imageoptim --directory /Users/Nick/Desktop/untitled"
end tell
end run
这实际上有效,或多或少。
我想改进这一点,因为我对它的工作方式并不是百分之百满意。
此刻,如果我添加/重命名图片,会打开一个终端窗口(有时是2个终端窗口),命令被激活,然后就是它。它永远不会泄露,并且一旦终端窗口打开就会触发通知,而不是在优化完成后触发。
我想如何改进它:
首先,我不想打开终端窗口。理想情况下,根本不应该打开任何东西。它应该只执行优化,就是这样。
通知应显示一些有用的消息,它应该只在压缩后打开(基本上是从脚本回调)但我不知道如何等待回调
理想情况下,通知应显示以前的尺寸和新尺寸。我搜索了一种获取文件夹大小的方法,但是我可以使用automator中没有任何内容。我的想法是获取以前的文件夹大小并将其添加到变量,运行所有内容,获取新文件夹大小,另一个变量并将变量打印为通知消息,但我不知道,如我所说,如何获取文件夹大小。
你能帮我一把甚至指点我一些有用的资源吗? (甚至更好)类似的东西已经存在,我只是想重新发明轮子,请让我知道:)
提前致谢
修改
我发现了这个:https://www.alfredforum.com/topic/3703-imageoptim-workflow/并且它几乎完全符合我的要求。是否有可能从Alfred wordkflow转换为纯自动机工作流程?
答案 0 :(得分:1)
我将此脚本保存在scripteditor中作为应用程序。所以现在设置的方式是我需要做的就是将Image文件拖到触发脚本的应用程序的图标上。您可以更改此设置并将脚本用作文件夹操作,或者您想要的其他操作
on open files_list
(*
scale v : Scale an image
scale specifier : the object for the command
[by factor real] : scale using a scalefactor
[to size integer] : scale using a max width/length
*)
set max_size to "600" as integer -- use the above commented code to play around with scaling. My example scaled everything to a width of 600 pixels proportionately
set output_folder to alias "Macintosh HD:Users:Smokestack:Desktop:untitled folder:" -- create an alias to whatever folder you want
tell application "System Events" to get the size of output_folder
set originalSize to the result
set n2 to "1,000,000" as integer
set originalSize to originalSize / n2
repeat with file_ref in files_list
try
tell application "Image Events"
set the_image to open file_ref
scale the_image to size max_size
save the_image in file ((output_folder as text) & name of the_image)
close the_image
end tell
on error error_string
display dialog "Skipping file " & (file_ref as text) & ¬
" due to error:" & error_string buttons {"OK"} default button 1
end try
end repeat
tell application "System Events" to get the size of output_folder
set newSize to the result
set newSize to newSize / n2
display dialog "The Original Folder Size Is " & originalSize & " Megabytes" & linefeed & "The New Folder Size Is " & newSize & " Megabytes" with title "FOLDER INFORMATION" buttons {"OK"} default button 1 giving up after 10
end open