applescript - 如何改进此脚本

时间:2017-06-28 21:20:29

标签: macos optimization applescript automator lossless-compression

首先,这是我第一次尝试使用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转换为纯自动机工作流程?

1 个答案:

答案 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