使用快速操作自动更改图像宽度并调整高度
Change width of image and adjust height automatically with Quick Action
如果您有图像文件,您可以执行以下操作:
- 在 Apples Preview 应用程序中打开文件
- 转到:工具>调整大小...
- 选中“按比例缩放”
- 将“宽度:”中的值更改为 100 像素
看起来像这样:
这将改变图像的宽度并自动调整高度,而不剪切图像。
我想为我创建一个快速操作:将宽度更改为 100 像素并自动调整高度。
是否可以使用 Automators Quick Action 编辑器来做到这一点?
on run {input, parameters}
set targetWidth to 100
repeat with anAlias in (get contents of input)
set hfsPath to anAlias as text
try
tell application "Image Events"
launch
set anImage to open (file hfsPath)
set {w, h} to dimensions of anImage
if w > h then
scale anImage to size targetWidth
else
scale anImage to size (round (targetWidth * h / w) rounding up)
end if
save anImage with icon
close anImage
end tell
on error error_message
display dialog error_message
end try
end repeat
return input
end run
- 打开 Automator
- Select 创建快速操作
- 设置“工作流在Finder.app中接收图像文件”
- 使用上述内容添加 运行 AppleScript 动作。
- 保存(此服务)
sips
是特定于 Mac 的 Apple 编写的命令行程序,具有一些基本的图像处理操作。 --resampleWidth
选项可以满足您的需要。 (可以通过终端内的 man sips
获得更多关于 sips
可以做什么的详细信息。)
此 sips
命令会将图像调整为您想要的大小:
sips --resampleWidth 100 path/to/image.png
要在 Automator 中使用它,我们可以将其包装在以下代码中:
for f in "$@"
do
sips --resampleWidth 100 "$f"
done
然后可以使用 运行 Shell Script Automator 操作触发:
Notes/caveats
如果原始图像小于 100px 宽,此命令
会将其缩放为比原来.
大
此外,正如评论中指出的那样,使用 sips
可能会导致
原始图像中的一些元数据不存在
缩放副本.
旋转问题?
在评论中建议 sips
不能正确处理旋转 90°(/270°) 的图像。我对此进行了测试,它似乎按预期工作,两种情况下输出图像的宽度均为 100。
测试的图像使用预览进行了旋转。我的理解是图像旋转有两种类型:
- 重新保存图像,所有像素都在新的旋转位置。
- 像素数据不变,在图像中添加数据表示'read in all the pixel data, then before you display it, translate everything (e.g.) 90°'。
第二种方法避免了重新保存,这对于有损格式可能会有问题,因为多次旋转每次都会丢失数据,即四次旋转将不会以原始数据结束再次。我依稀记得使用 sips
进行此类图像旋转时出现的一些问题,但在我看来,它现在可能已得到修复。我正在使用 sips
的 build 294 [通过在终端中输入 sips -v
显示] 和 Mac OS Catalina (10.15.7).
为了确定,我建议使用 JPEG 等有损格式进行测试,看看 Preview/sips 在旋转时的表现是否不同。
如果您有图像文件,您可以执行以下操作:
- 在 Apples Preview 应用程序中打开文件
- 转到:工具>调整大小...
- 选中“按比例缩放”
- 将“宽度:”中的值更改为 100 像素
看起来像这样:
这将改变图像的宽度并自动调整高度,而不剪切图像。
我想为我创建一个快速操作:将宽度更改为 100 像素并自动调整高度。
是否可以使用 Automators Quick Action 编辑器来做到这一点?
on run {input, parameters}
set targetWidth to 100
repeat with anAlias in (get contents of input)
set hfsPath to anAlias as text
try
tell application "Image Events"
launch
set anImage to open (file hfsPath)
set {w, h} to dimensions of anImage
if w > h then
scale anImage to size targetWidth
else
scale anImage to size (round (targetWidth * h / w) rounding up)
end if
save anImage with icon
close anImage
end tell
on error error_message
display dialog error_message
end try
end repeat
return input
end run
- 打开 Automator
- Select 创建快速操作
- 设置“工作流在Finder.app中接收图像文件”
- 使用上述内容添加 运行 AppleScript 动作。
- 保存(此服务)
sips
是特定于 Mac 的 Apple 编写的命令行程序,具有一些基本的图像处理操作。 --resampleWidth
选项可以满足您的需要。 (可以通过终端内的 man sips
获得更多关于 sips
可以做什么的详细信息。)
此 sips
命令会将图像调整为您想要的大小:
sips --resampleWidth 100 path/to/image.png
要在 Automator 中使用它,我们可以将其包装在以下代码中:
for f in "$@"
do
sips --resampleWidth 100 "$f"
done
然后可以使用 运行 Shell Script Automator 操作触发:
Notes/caveats
如果原始图像小于 100px 宽,此命令 会将其缩放为比原来.
大此外,正如评论中指出的那样,使用
sips
可能会导致 原始图像中的一些元数据不存在 缩放副本.
旋转问题?
在评论中建议 sips
不能正确处理旋转 90°(/270°) 的图像。我对此进行了测试,它似乎按预期工作,两种情况下输出图像的宽度均为 100。
测试的图像使用预览进行了旋转。我的理解是图像旋转有两种类型:
- 重新保存图像,所有像素都在新的旋转位置。
- 像素数据不变,在图像中添加数据表示'read in all the pixel data, then before you display it, translate everything (e.g.) 90°'。
第二种方法避免了重新保存,这对于有损格式可能会有问题,因为多次旋转每次都会丢失数据,即四次旋转将不会以原始数据结束再次。我依稀记得使用 sips
进行此类图像旋转时出现的一些问题,但在我看来,它现在可能已得到修复。我正在使用 sips
的 build 294 [通过在终端中输入 sips -v
显示] 和 Mac OS Catalina (10.15.7).
为了确定,我建议使用 JPEG 等有损格式进行测试,看看 Preview/sips 在旋转时的表现是否不同。