当我运行Apple的Automator来简单地剪切大小的图像时,Automator也会降低文件的质量(jpg)并且它们会变得模糊。
我该怎样防止这种情况?我可以控制哪些设置?
修改
或者是否有其他工具可以完成同样的工作,但不会影响图像质量?
答案 0 :(得分:6)
Automator的“裁剪图像”和“缩放图像”动作没有质量设置 - 就像Automator的情况一样,简单性胜过可配置性。但是,还有另一种方法可以访问 CoreImage 的图像处理工具,而无需使用Cocoa编程: Scriptable Image Processing System ,它使图像处理功能可用于
sips
utility AppleScript 来自Image Events,这是OS X提供的可编写脚本的匿名后台应用程序。有crop
和scale
命令,以及使用
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提供了有关scale和crop使用情况的精彩教程。
答案 1 :(得分:6)
如果你想更好地控制JPEG压缩量,kopischke说你必须使用sips
实用程序,它可以在shell脚本中使用。以下是您在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