0

0

Mac怎样使用脚本批量调整图片?sips命令实战

雪夜

雪夜

发布时间:2025-08-14 20:36:02

|

577人浏览过

|

来源于php中文网

原创

mac上批量调整图片最高效的方式是使用系统自带的sips命令行工具;2. sips支持调整尺寸(-z、-w、-h)、旋转(-r)、翻转(-f)、格式转换(-s format)和裁剪(-c)等操作;3. 通过编写shell脚本可实现自动化批量处理,建议设置独立的输入输出目录并使用--out参数避免覆盖原图;4. 脚本中需对变量加双引号以处理文件名中的空格和特殊字符,同时添加错误提示和日志便于调试;5. 运行脚本前需赋予执行权限(chmod +x),并确保输出目录有写入权限;6. 大批量处理时单个for循环已足够,极端情况可结合find与xargs优化性能;7. 掌握sips参数差异(如-z与-w)能更精准控制输出效果,整体方案兼具安全、高效与可复用性,是mac用户批量处理图片的理想选择。

Mac怎样使用脚本批量调整图片?sips命令实战

Mac上想要批量调整图片,最直接、效率最高的方式就是利用系统自带的

sips
命令行工具。它能让你通过简单的脚本,瞬间完成大量图片的尺寸调整、格式转换、旋转等操作,省去了手动一个个处理的繁琐。

解决方案

说起Mac上批量处理图片,我脑子里第一个跳出来的就是

sips
这个命令行工具。它简直是苹果系统自带的宝藏,强大得超乎想象,而且还不用装任何第三方软件。对我个人而言,它就是那种能把重复劳动自动化,让我能把时间花在更有趣事情上的利器。

最基础的用法,比如你想把一张图片宽度缩放到800像素,同时保持比例,可以这样:

sips -Z 800x600 image.jpg
(这里
600
其实是最大高度,
sips
会自动根据宽度等比缩放,或者你可以直接用
-Z 800
来指定宽度,它会自己计算高度。) 如果想更精确,只指定宽度,让高度自动调整,用
-w
sips -w 800 image.jpg
这个命令会直接修改原图,所以操作前,我通常会习惯性地备份一下,或者把处理后的图片输出到另一个目录。

sips命令能做哪些图片处理?常见操作一览

sips
的强大之处在于它能处理的远不止尺寸调整。我经常用它来做一些基础但又很频繁的图片操作,比如:

  • 调整尺寸(Resizing):
    • sips -Z 800x600 input.jpg
      :按最大边长(不超过800x600)等比缩放。
    • sips -w 800 input.jpg
      :按宽度800像素等比缩放。
    • sips -h 600 input.jpg
      :按高度600像素等比缩放。
    • sips -s 800 600 input.jpg
      :强制缩放到800x600,可能会导致图片变形。
  • 旋转(Rotating):
    • sips -r 90 input.jpg
      :顺时针旋转90度。
    • sips -r -90 input.jpg
      :逆时针旋转90度。
  • 翻转(Flipping):
    • sips -f horizontal input.jpg
      :水平翻转。
    • sips -f vertical input.jpg
      :垂直翻转。
  • 格式转换(Converting Format):
    • sips -s format jpeg input.png --out output.jpg
      :将PNG转为JPG。
    • sips -s format png input.jpg --out output.png
      :将JPG转为PNG。
    • 你甚至可以指定JPG的压缩质量:
      sips -s formatOptions 80 input.png --out output.jpg
      (80代表80%质量)。
  • 裁剪(Cropping):
    • sips -c 10 10 200 150 input.jpg --out cropped.jpg
      :从(10,10)坐标开始,裁剪200宽、150高的区域。

这些命令单独用起来可能觉得也就那样,但一旦你把它们和脚本结合起来,那效率提升可就不是一点半点了。

如何编写一个简单的Shell脚本批量处理图片?

光知道

sips
命令还不够,要真正发挥它的威力,你得把它放到一个脚本里,让它自己跑起来。这就像是把一个强大的工具,装配到一条自动化生产线上。

Facetune
Facetune

一款在线照片和视频编辑工具,允许用户创建AI头像

下载

创建一个新的文本文件,比如命名为

batch_resize.sh
,然后用任何文本编辑器打开它。

#!/bin/bash

# 定义输入和输出目录
# 建议把要处理的图片放到一个单独的文件夹,比如 'original_images'
# 处理后的图片输出到另一个文件夹,比如 'processed_images'
INPUT_DIR="./original_images"
OUTPUT_DIR="./processed_images"

# 检查输出目录是否存在,不存在则创建
if [ ! -d "$OUTPUT_DIR" ]; then
    mkdir -p "$OUTPUT_DIR"
    echo "创建了输出目录: $OUTPUT_DIR"
fi

# 目标宽度
TARGET_WIDTH=800

echo "开始批量处理图片..."

# 遍历输入目录中的所有图片文件
# 我这里只处理 .jpg, .jpeg, .png 文件,你可以根据需要添加其他格式
for img_file in "$INPUT_DIR"/*.{jpg,jpeg,png}; do
    # 检查文件是否存在,避免 glob 模式没有匹配到文件时循环变量是模式本身
    if [ -f "$img_file" ]; then
        # 获取文件名(不包含路径)
        filename=$(basename "$img_file")
        # 构建输出文件路径
        output_path="$OUTPUT_DIR/$filename"

        echo "正在处理: $img_file -> $output_path"

        # 使用 sips 命令调整图片尺寸并保存到输出目录
        # 这里使用 -Z 确保等比例缩放,并指定最大宽度为 TARGET_WIDTH
        # 如果你只想指定宽度,用 -w $TARGET_WIDTH
        sips -Z "$TARGET_WIDTH"x99999 "$img_file" --out "$output_path"

        # 检查 sips 命令是否执行成功
        if [ $? -eq 0 ]; then
            echo "成功处理: $filename"
        else
            echo "处理失败: $filename"
        fi
    fi
done

echo "所有图片处理完成!"

保存文件后,在终端里给它执行权限:

chmod +x batch_resize.sh
然后运行它:
./batch_resize.sh

这个脚本会遍历

original_images
文件夹里所有指定格式的图片,然后把它们处理成宽度不超过800像素的新图片,保存到
processed_images
文件夹。这种方式,既保证了原图安全,又实现了自动化。我个人觉得,用脚本处理文件最大的好处就是可控性强,而且一次写好,以后遇到类似需求直接改改参数就能复用。

批量处理图片时,有哪些常见的坑和优化建议?

虽然

sips
和Shell脚本用起来很爽,但实际操作中也确实会遇到一些小麻烦,或者说是一些值得注意的地方。我踩过的一些坑和总结的经验,希望能让你少走弯路:

  1. 文件名中的空格和特殊字符:这是个老生常谈的问题了。如果你的图片文件名里有空格或者其他特殊字符(比如括号、
    &
    等),在Shell脚本里不加引号直接使用变量,那命令就会解析错误。比如
    My Image.jpg
    sips
    会把它当成
    My
    Image.jpg
    两个参数。解决办法很简单,就是始终给文件名变量加上双引号,就像脚本示例里那样:
    "$img_file"
  2. 覆盖原图的风险
    sips
    默认是直接修改原图的。如果你不加
    --out
    参数,或者
    --out
    指向的路径就是原图路径,那一旦操作失误,原图就没了。我强烈建议总是把处理后的图片输出到另一个新目录,或者至少在处理前备份一份原图。这简直是黄金法则。
  3. 大批量文件处理的效率:虽然
    sips
    本身效率很高,但如果你的文件夹里有几万张图片,
    for
    循环一个一个地处理可能还是会显得有点慢。对于这种极端情况,可以考虑结合
    find
    命令和
    xargs
    来并行处理,但那会稍微复杂一些,一般用户可能用不到。日常几百几千张图,上面那个脚本就足够了。
  4. 权限问题:有时候脚本运行失败,可能是因为脚本文件本身没有执行权限,或者脚本尝试写入的目录没有写入权限。检查一下
    chmod +x
    有没有执行,以及输出目录的权限。
  5. 错误处理和日志:在脚本里加入一些
    echo
    语句来输出当前正在处理的文件名,以及处理成功或失败的提示,这样在脚本跑起来的时候,你就能实时看到进度,也能及时发现哪个文件出了问题。这在调试的时候特别有用。我上面的脚本里已经加了一些简单的
    echo
  6. Sips参数的细微差别:比如
    -Z
    -w
    区别
    -Z
    是按最大边长等比缩放,
    -w
    是只按宽度等比缩放。搞清楚这些细微的差别,才能准确达到你想要的效果。有时候图片尺寸不对,就是因为参数没选对。

总的来说,

sips
配合Shell脚本,是Mac用户批量处理图片的一把瑞士军刀。虽然初期可能需要一点点学习成本,但一旦掌握,它能帮你省下大量时间,让你的数字生活更有效率。我就是这样,一旦发现有重复性的任务,第一反应就是“能不能写个脚本搞定它?”而
sips
就是这种思维下,我最常用的工具之一。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

739

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

431

2024.06.27

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.11.24

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

37

2025.12.13

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

70

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

297

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

469

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

17

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

计算机系统从应用层到底层
计算机系统从应用层到底层

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号