可通过ImageMagick的montage或convert、sips链式处理、Python Pillow脚本、预览转PDF再抽帧、快捷指令封装及shell+awk动态生成命令等七种终端方案,实现Mac多张截图无缝纵向/横向拼接。

如果您已通过Mac截取多张局部截图,但需要将它们纵向或横向无缝拼接为一张长图,且希望借助终端命令实现自动化、无损合并,则可采用以下多种技术路径。以下是解决此问题的步骤:
一、使用ImageMagick的montage命令垂直拼接
该方法依赖开源图像处理工具ImageMagick,通过montage命令按指定顺序将图片堆叠为单张长图,支持统一缩放、间距控制与背景填充。
1、在终端中执行brew install imagemagick安装ImageMagick(如未安装Homebrew,请先运行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)")。
2、确保所有待拼接截图按期望顺序命名,例如screenshot_01.png、screenshot_02.png、screenshot_03.png,并置于同一文件夹内。
3、进入该文件夹后,在终端中输入以下命令进行垂直拼接:montage -mode concatenate -tile 1x *.png -background none -gravity center output_long.png。
4、检查生成的output_long.png,确认图片上下对齐无错位、无多余边距。
二、使用ImageMagick的convert命令手动叠加合成
当需精确控制每张图的Y轴偏移量(例如应对截图间存在重复区域或需微调对齐),convert配合-composite可实现像素级定位粘贴。
1、先获取首张图高度:identify -format "%h" screenshot_01.png,记下返回值(如1200)。
2、创建空白画布,高度为所有图高度之和(假设共3张,每张1200px,无重叠):convert -size 800x3600 xc:none canvas.png(其中800为截图宽度,需根据实际替换)。
3、依次将各图复合到画布指定位置:convert canvas.png screenshot_01.png -geometry +0+0 -composite temp1.png。
4、继续叠加第二张:convert temp1.png screenshot_02.png -geometry +0+1200 -composite temp2.png(+1200表示从Y=1200处开始贴入)。
5、叠加第三张:convert temp2.png screenshot_03.png -geometry +0+2400 -composite output_long.png。
三、使用sips命令链式裁剪+拼接(仅限同尺寸图)
macOS原生sips工具虽不直接支持拼接,但可通过生成带透明扩展区域的中间图,再结合cat与pngpaste等辅助完成基础纵向拼合。
1、为每张图添加底部透明扩展区(除最后一张):sips --padToHeightWidth 2400 800 screenshot_01.png --out padded_01.png(2400为目标总高,800为宽)。
2、使用pngpaste(需brew install pngpaste)将第一张图复制进剪贴板:pngpaste /tmp/clip1.png 。
3、将第二张图追加到底部:convert /tmp/clip1.png screenshot_02.png -append /tmp/clip2.png。
4、重复追加操作:convert /tmp/clip2.png screenshot_03.png -append output_long.png。
四、通过Python脚本调用Pillow库全自动拼接
若需稳定处理不同尺寸截图、自动识别重叠区域并消除接缝,Python脚本提供最大灵活性,且无需额外GUI软件。
1、在终端中安装Pillow:pip3 install pillow。
2、新建文本文件stitch.py,写入如下内容(以垂直拼接为例):
from PIL import Image
import sys
images = [Image.open(x) for x in sys.argv[1:]]
width = max(i.width for i in images)
height = sum(i.height for i in images)
result = Image.new('RGBA', (width, height))
y_offset = 0
for img in images:
result.paste(img, (0, y_offset))
y_offset += img.height
result.save('output_long.png')
3、保存后,在终端中执行:python3 stitch.py screenshot_01.png screenshot_02.png screenshot_03.png。
4、脚本将在当前目录生成output_long.png,所有图片严格按参数顺序纵向拼接,宽度自适应为最宽图,高度累加。
五、利用预览应用+终端协同快速导出PDF再转图
当终端命令环境受限或图片含Alpha通道导致合成异常时,可先用预览批量生成PDF,再用pdfimages或convert抽帧还原为单图。
1、在访达中全选截图文件,右键→“打开方式”→“预览”。
2、点击左侧面板缩略图右下角“合并”按钮,生成多页PDF文档。
3、在终端中执行:convert -density 300 merged.pdf -quality 100 output_long.png(convert来自ImageMagick,-density确保清晰度)。
4、检查output_long.png是否完整包含全部页面内容,无压缩失真。
六、使用macOS快捷指令+shell动作混合执行
将终端命令封装进图形化快捷指令,兼顾易用性与命令行能力,适合频繁拼接场景。
1、打开“快捷指令”应用,点击右上角“+”新建快捷指令。
2、添加操作:“运行shell脚本”,在脚本框中填入:cd "$1"; montage -mode concatenate -tile 1x *.png -background none -gravity center "$2"。
3、添加两个“快捷指令输入”变量:第一个设为“文件”,第二个设为“文本”,分别对应截图所在文件夹路径与输出文件名(如long.png)。
4、保存快捷指令,命名为“拼接长图”。
5、使用时,选中截图文件夹,右键→“服务”→“拼接长图”,输入输出名后回车执行。
七、使用sips + awk生成动态拼接命令
针对大量截图(如20+张)且需跳过损坏文件或按数字序号过滤时,可结合shell文本处理动态构造拼接链。
1、进入截图目录后,执行:ls screenshot_*.png | sort -V | awk '{print " "$1}' | xargs -I {} convert {} -resize 1200x\! -strip +repage /tmp/staged{}.png(统一缩放至宽度1200px并清理元数据)。
2、生成拼接列表:ls /tmp/staged*.png | sort -V | paste -sd ' ' -。
3、将上步输出复制,粘贴至convert命令后:convert [粘贴内容] -append output_long.png。
4、执行该完整命令,等待合成完成。










