我喜欢1000张不同尺寸的图像。是否可以在一个命令中裁剪并调整它们的大小,然后从它们中进行拼接。我试过这种方式调整图像大小,但是-page
选项无法正常工作它没有得到调整大小的维度,而是得到了原始维度。
这是我的例子,它没有作物,因为我真的不太了解如何在一个文件上应用multy操作然后转移到另一个文件。
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
那么,是否可以在文件中执行多个操作,然后移动到另一个操作等。然后一次创建它们的马赛克。一次拍摄这一切真的是个好主意,或者首先我必须准备每个小图像然后做马赛克。我的意思是如果我有很大的图像集合,我可能会用完RAM,所以在这种情况下我可以做一小部分马赛克然后将它们全部组合起来。
但第二个问题仍然出现,首先准备好所有小瓷砖然后做马赛克并不是更好。
感谢您的帮助。
答案 0 :(得分:1)
您可能需要以下内容:
#!/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
,这会让它感到困惑!