You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将多张图片分片合并为单张?ImageMagick命令行操作指南

嗨,这问题我太熟了!用ImageMagick的montage或者convert工具都能轻松搞定,具体怎么操作得看你的图片分片是怎么命名和排列的,下面给你两种最常用的场景方案:

方法一:用montage工具(适合规整行列的分片)

montage是ImageMagick专门用来拼接图片网格的工具,对于100张分片(比如10×10的网格)来说特别方便,一行命令就能搞定:

# 假设你的分片是按规律命名(比如tile_00.png到tile_99.png),指定10行10列无缝拼接
montage tile_*.png -tile 10x10 -geometry +0+0 output.png

参数解释:

  • tile_*.png:匹配所有分片图片,一定要确保文件名是按拼接顺序命名的(比如横向从左到右、纵向从上到下的顺序),不然拼接出来会乱;如果命名不规律,可以用ls -v tile_*.png按版本号排序后传入,比如montage $(ls -v tile_*.png) -tile 10x10 -geometry +0+0 output.png
  • -tile 10x10:指定拼接的行列数(这里是10行10列,刚好100张);如果你只确定列数,比如10列,行数自动计算,可以写-tile x10;反之确定行数写-tile 10x
  • -geometry +0+0:去掉图片之间的间距,实现无缝拼接;如果想要留白,可以改成+2+2这样的数值(表示上下左右各留2px间距)
方法二:用convert工具(灵活自定义拼接顺序)

convert更适合需要手动控制拼接顺序的场景,比如先拼每行,再把所有行纵向拼接起来:

步骤1:拼接每行的图片(横向拼接)

比如10×10的分片,先把每行的10张图拼成一行:

# 拼接第1行
convert tile_00.png tile_01.png tile_02.png ... tile_09.png +append row_0.png
# 拼接第2行
convert tile_10.png tile_11.png ... tile_19.png +append row_1.png
# 重复这个操作直到拼完10行

步骤2:把所有行纵向拼接成完整图

convert row_0.png row_1.png ... row_9.png -append output.png

更高效的一次性写法

可以用括号分组,直接一行完成拼接:

convert \
  \( tile_00.png tile_01.png ... tile_09.png +append \) \
  \( tile_10.png tile_11.png ... tile_19.png +append \) \
  ... \
  \( tile_90.png tile_91.png ... tile_99.png +append \) \
  -append output.png

参数解释:

  • +append:横向拼接图片(从左到右)
  • -append:纵向拼接图片(从上到下)
额外注意事项
  • 如果你的分片尺寸不一致,montage会自动把所有图片统一到最大的那个尺寸;如果要保持原尺寸拼接,建议先把所有分片调整成相同尺寸再操作
  • 输出格式可以自己指定,比如output.jpgoutput.webp,ImageMagick会自动识别并处理对应格式
  • 如果是超大分辨率的分片,montage的内存占用会比convert更友好一些

内容的提问来源于stack exchange,提问作者Phạm Văn Thông

火山引擎 最新活动