Apple的Automator:jpg的压缩设置?

时间:2012-05-22 12:33:12

标签: automator

当我运行Apple的Automator来简单地剪切大小的图像时,Automator也会降低文件的质量(jpg)并且它们会变得模糊。

我该怎样防止这种情况?我可以控制哪些设置?

修改

或者是否有其他工具可以完成同样的工作,但不会影响图像质量?

5 个答案:

答案 0 :(得分:6)

Automator的“裁剪图像”和“缩放图像”动作没有质量设置 - 就像Automator的情况一样,简单性胜过可配置性。但是,还有另一种方法可以访问 CoreImage 的图像处理工具,而无需使用Cocoa编程: Scriptable Image Processing System ,它使图像处理功能可用于

    通过the sips utility
  1. shell 。你可以使用它来摆弄最微小的设置,但由于它在处理方面有点神秘,你可能会更好地使用第二种方式,
  2. AppleScript 来自Image Events,这是OS X提供的可编写脚本的匿名后台应用程序。有cropscale命令,以及使用

    保存为JPEG时指定压缩级别
    save <image> as JPEG with compression level (low|medium|high)
    

    使用“运行AppleScript”操作而不是“裁剪”/“缩放”操作并将图像事件命令包装在tell application "Image Events"块中,您应该进行设置。例如,要将图像缩放到其大小的一半并以最佳质量保存为JPEG,请覆盖原始图像:

    on run {input, parameters}
        set output to {}
        repeat with aPath in input
            tell application "Image Events"
                set aPicture to open aPath
                try
                    scale aPicture by factor 0.5
                    set end of output to save aPicture as JPEG with compression level low
                on error errorMessage
                    log errorMessage
                end try
                close aPicture
            end tell
        end repeat
        return output -- next action processes edited files.
    end run
    

    - 对于其他比例,相应地调整因子(1 = 100%,。5 = 50%,。25 = 25%等);对于裁剪,请将scale aPicture by factor X替换为crop aPicture to {width, height}。 Mac OS X Automation提供了有关scalecrop使用情况的精彩教程。

答案 1 :(得分:6)

如果你想更好地控制JPEG压缩量,kopischke说你必须使用sips实用程序,它可以在shell脚本中使用。以下是您在Automator中的表现:

首先获取文件和压缩设置:

Passing files and compression settings to a shell script in Automator

询问文字操作不应接受任何输入(右键单击它,选择“忽略输入”)。

确保第一个获取变量值操作不接受任何输入(右键单击它们,选择“忽略输入”),并确保第二个获取变量值从第一个输入。这将创建一个数组,然后将其传递给shell脚本。数组中的第一项是为Automator脚本提供的压缩级别。第二个是脚本将执行sips命令的文件列表。

运行Shell脚本操作顶部的选项中,选择“/ bin / bash”作为Shell并为Pass Input选择“as arguments”。然后粘贴此代码:

itemNumber=0
compressionLevel=0

for file in "$@"
do
    if [ "$itemNumber" = "0" ]; then
        compressionLevel=$file
    else
        echo "Processing $file"
        filename="$file"
        sips -s format jpeg -s formatOptions $compressionLevel "$file" --out "${filename%.*}.jpg"
    fi
    ((itemNumber=itemNumber+1))
done
((itemNumber=itemNumber-1))
osascript -e "tell app \"Automator\" to display dialog \"${itemNumber} Files Converted\" buttons {\"OK\"}"

如果您点击底部的结果,它会告诉您当前正在处理的文件。玩得开心压缩!

答案 2 :(得分:2)

Eric的代码非常精彩。可以完成大部分工作。 但是如果图像的文件名包含空格,则此工作流程将不起作用。(由于空格会在处理sips时破坏shell脚本。) 有一个简单的解决方案:在此工作流程中添加“重命名查找项目”。 用“_”或任何你喜欢的东西替换空格。 然后,这很好。

答案 3 :(得分:1)

来自'20的评论

我将脚本更改为快速操作,没有任何提示(进行压缩和确认)。它将复制文件,并将原始版本重命名为_original。我还包括了nyam针对“空间”问题的解决方案。 您可以在此处下载工作流文件:http://mobilejournalism.blog/files/Compress%2080%20percent.workflow.zip(已压缩文件,因为否则它将被识别为文件夹而不是工作流文件)

希望这对任何正在寻找这样的解决方案的人很有用(就像我一个小时前所做的那样)。

答案 4 :(得分:0)

来自&#39; 17

的评论

避免&#34;空间&#34;问题是,改变IFS比重命名更聪明。 备份当前IFS并将其更改为\ n only。并在处理循环后恢复原始IFS。

ORG_IFS=$IFS
IFS=$'\n'
for file in $@
do
    ...
done
IFS=$ORG_IFS