0

我有 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

那么,是否可以在文件中执行多项操作,然后移动到另一个等。然后一次性创建它们的马赛克。在一个镜头中完成所有这些实际上是个好主意,还是首先我必须准备每个小图像,然后进行马赛克。我的意思是,如果我有非常多的图像集合,我可能会用完 RAM,所以在这种情况下,我可以做一小部分马赛克,然后将它们全部组合在一起。

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

谢谢你的帮助。

4

1 回答 1

2

您可能想要以下内容:

#!/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 行,请替换10xx30.

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

于 2016-11-17T09:34:27.890 回答