macOS 图片处理神器 sips

前言

sips 全称 scriptable image processing system,是 macOS 自带的命令行图片处理工具,无需安装任何第三方软件就能完成绝大部分日常图片处理需求:查看尺寸、调整大小、裁剪、旋转、格式转换、批量处理等等。

对于只想快速完成一两张图片的简单处理的场景来说,sips 是最好不过的选择。

查看支持的图片格式可以用 sips --formats,支持的格式非常丰富,jpg、png、heic、webp、avif、tiff、psd 等常见格式都没问题。

查看图片信息

-g 选项可以查询图片的单个属性,加上 -g all 或者多次使用 -g 可以查询多个属性。

最常用的就是查看图片的宽和高:

1
sips -g pixelWidth -g pixelHeight image.png

执行后会输出:

1
2
3
/Users/mine/image.png
pixelWidth: 1920
pixelHeight: 1080

加上 --getProperty all 或者 -g all 可以一次性查看所有属性:

1
sips -g all image.png

执行后会输出类似下面这种信息,包含了图片格式、色彩空间、采样率、DPI 等详细信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
/Users/mine/image.png
pixelWidth: 1920
pixelHeight: 1080
typeIdentifier: public.png
format: png
formatOptions: default
space: srgb
samplesPerPixel: 4
bitsPerSample: 8
hasAlpha: yes
dpiWidth: 72.000
dpiHeight: 72.000
...

支持同时查看多个图片的属性,在参数中同时放上所有的图片即可。

1
sips -g all temp1.heic temp2.heic

调整图片尺寸

缩放到指定尺寸

-z 选项可以将图片缩放到指定的宽高(注意是高度在前、宽度在后):

1
sips -z 1080 1920 image.png --out image-1920x1080.png

⚠️ -z 是等比例拉伸到目标尺寸,如果原图比例和目标尺寸不一致,会导致图片变形。如果想保持原图比例缩放,可以使用 -Z。

按比例缩放(保持宽高比)

-Z 选项指定最长边的最大像素值,会等比例缩放图片:

1
sips -Z 1080 image.png --out image-resized.png

比如原图是 4000x3000,执行后图片尺寸会变成 1440x1080,最长边被限制为 1080。

-Z 是日常使用频率最高的缩放命令,比如需要批量压缩一批图片或者调整图片分辨率时特别好用。

只调整宽度或高度

只调整宽度(高度按比例自动计算):

1
sips --resampleWidth 800 image.png --out image-800.png

只调整高度(宽度按比例自动计算):

1
sips --resampleHeight 600 image.png --out image-600.png

旋转和翻转

旋转

-r 选项按顺时针旋转指定角度:

1
sips -r 90 image.png --out image-rotated.png

这里的 90 表示顺时针旋转 90 度,180、270 同理,也可以使用 90c 这种带 c 后缀的写法(c 代表 clockwise 顺时针)。

翻转

-f 选项用于翻转图片:

1
2
3
4
5
# 水平翻转
sips -f horizontal image.png --out image-horizontal.png

# 垂直翻转
sips -f vertical image.png --out image-vertical.png

裁剪和填充

居中裁剪

-c 选项按指定宽高居中裁剪图片:

1
sips -c 1080 1080 image.png --out image-cropped.png

执行后图片会被居中裁剪成 1080x1080 的尺寸,多余部分会被裁掉。

如果原图小于指定尺寸,sips 会自动在四周填充黑色像素。

自定义裁剪偏移

如果不想居中裁剪,可以配合 --cropOffset 选项指定偏移量:

1
sips -c 1080 1080 --cropOffset 0 0 image.png --out image-top-left.png

偏移量的两个值分别表示垂直方向和水平方向的偏移,单位是像素,偏移后会从偏移位置开始取指定大小的区域。

填充

-p 选项用于在图片四周添加指定颜色的填充:

1
sips -p 1080 1920 image.png --out image-padded.png

默认填充颜色是黑色,可以通过 --padColor 指定填充颜色:

1
sips -p 1080 1920 --padColor FFFFFF image.png --out image-padded.png

颜色值是十六进制 RGB,不需要带 # 号。

格式转换

最常见的需求大概就是格式转换了,sips 支持的格式非常丰富,转换格式非常简单,只需要在输出时指定文件后缀即可:

1
2
3
4
5
6
7
8
# PNG 转 JPEG
sips image.png --out image.jpg

# HEIC 转 PNG
sips image.heic --out image.png

# JPEG 转 WebP
sips image.jpg --out image.webp

⚠️ 有些格式虽然支持读取但不支持写入,比如 webp,执行转换时可能会报错。通过 sips --formats 可以看到哪些格式后面标注了 Writable。

修改图片属性

设置压缩质量

对于 JPEG 图片,可以通过 formatOptions 设置压缩质量:

1
sips -s formatOptions 80 image.jpg --out image-compressed.jpg

可选值有 low、normal、high、best,或者直接指定一个百分数值(数字越小压缩越狠,图片越小)。

设置 DPI

dpiWidth 和 dpiHeight 用于设置图片的 DPI:

1
sips -s dpiWidth 300 -s dpiHeight 300 image.png --out image-300dpi.png

修改 EXIF 信息

可以修改 EXIF 中的一些字段,比如修改作者:

1
sips -s artist "mine" image.jpg --out image-author.jpg

其他可以修改的字段包括 make、model、description、copyright 等。

批量处理

单独执行一次 sips 命令只能处理一张图片,但 sips 本身就支持多文件参数,配合 shell 的通配符就能轻松实现批量处理。

批量缩放

将当前目录下所有 jpg 图片等比例缩放到最长边 1080:

1
sips -Z 1080 *.jpg

⚠️ 注意没有加 --out 选项时,sips 会直接覆盖原文件!批量处理前最好先备份一份原图。

更稳妥的写法是输出到指定目录:

1
2
mkdir -p resized
sips -Z 1080 *.jpg --out resized/

批量格式转换

将当前目录下所有 png 转成 jpg:

1
2
mkdir -p jpg
sips *.png --out jpg/

sips 会自动根据输出目录中的文件后缀选择目标格式,但更稳妥的做法是显式指定格式:

1
sips -s format jpeg *.png --out jpg/

循环处理(更灵活)

当文件名命名规则比较复杂,或者需要对每个文件做不同处理时,可以用 shell 的 for 循环:

1
2
3
for file in *.heic; do
sips -s format jpeg -s formatOptions 80 "$file" --out "${file%.heic}.jpg"
done

这里的 ${file%.heic} 会去掉文件名后面的 .heic 后缀,从而得到不含扩展名的部分。

批量旋转

将当前目录下所有图片顺时针旋转 90 度:

1
2
mkdir -p rotated
sips -r 90 *.jpg --out rotated/

实用场景示例

截屏图片压缩

需要把截图上传到一些对图片大小有限制的平台,可以批量压缩:

1
2
mkdir -p compressed
sips -Z 1920 -s formatOptions 75 *.png --out compressed/

去除图片中的 EXIF 信息

分享图片之前去去除 EXIF 隐私信息:

1
sips -d allxml image.jpg --out image-clean.jpg

一键生成 App Icon

sips 甚至可以用来生成 App Icon:

1
sips -i icon.png

执行后会在当前目录生成一个 Icon\r 文件,可以作为 macOS 应用的图标文件使用。

总结

sips 是 macOS 上一个非常方便的命令行图片处理工具,常用功能基本全覆盖。浏览器一直收藏着几个免费的图片处理网站,愣是没发现手边就已经有一个现成的本地工具。