ImageMagick裁剪一次调整多个文件马赛克的大小

ImageMagick crop resize multiple files mosaic at once

我有大约 1000 张不同尺寸的图片。是否可以在一个命令中裁剪和调整它们的大小,然后从它们中进行马赛克。我尝试过这种方式来调整图像的大小,但 -page 选项无法正常工作,它没有获得调整后的尺寸,而是原始尺寸。

这是我的例子,里面没有裁剪,因为我真的不太明白如何在一个文件上应用多个操作然后移动到另一个文件。

convert \
-page +0+0 img1.png -resize 50x50 \
-page +50+0 img2.png -resize 50x50 \
-page +100+0 img3.png -resize 50x50 \
....
-mosaic mosaic.png

所以,是否可以在一个文件中进行多个操作,然后移动到另一个文件等。然后一次创建它们的马赛克。在一次拍摄中完成所有这些实际上是个好主意,还是首先我必须准备好每个小图像然后再进行马赛克。我的意思是,如果我有大量图像,我可能会 运行 内存不足,所以在这种情况下,我可以做一小部分马赛克,然后将它们全部组合在一起。

但是第二个问题还是出现了,是不是先准备好所有的小瓷砖再做马赛克比较好。

感谢您的帮助。

您可能需要如下内容:

#!/bin/bash
# Avoid problems if there are no JPGS, or no PNG files, and allow JPG or jpg, i.e. case-insensitive 
shopt -s nullglob nocaseglob

# Loop through all JPGs and all PNGs in current directory
for f in *.png *.jpg; do
    convert "$f" -resize 50x50 -crop 30x30+0+0 +repage miff:-
done | montage -tile 10x -geometry +0+0 miff:- result.png

这意味着您 运行 为每个图像制作一个 convert 以使其具有正确的大小和形状,并将其发送到 MIFF: 输出流。在循环结束时,您启动一​​个 montage 命令,该命令从 MIFF: 收集文件并将它们以 10 个图像为一组的行放置在页面上 (-tile 10x),中间没有空格 ( -geometry +0+0).

如果您想要 30 张图像 向下 页面,而不是 10 行 横跨 页面,请将 10x 替换为 x30.

P.S。不要尝试在循环内向 stdout 添加任何调试语句,因为它们将被传递到 montage 中,这会混淆它!