如何将两个文件夹中的图像与 imagemagick 并排合并在一起?

How can I merge images from two folders into a together side-by-side with imagemagick?

我有两个文件夹,A and B,其中包含具有相应名称的图像文件。

例如,每个包含标记为 01.png, 02.png, 03.png, etc 的文件。

我如何合并 相应的文件,以便我有第三个 folder C 包含所有合并的照片,以便两个原件并排。

我在 Linux,如果有任何变化的话。

使用 ImageMagick 版本 6,如果你的图像都是相同的尺寸,并且如果你的系统内存可以处理将所有输入图像读取到一个命令中,你可以使用这样的命令来做到这一点...

convert FolderA/*.jpg -set filename:f "%[f]" \
   -set option:distort:viewport %[fx:w*2] -distort SRT 0 null: \
   FolderB/*.jpg -gravity east -layers composite FolderC/"%[filename:f]"

首先从 FolderA 中读取所有图像并将它们的视口扩展到右侧的两倍宽度。

然后它添加特殊的内置 "null:" 以在读取第二个列表之前分隔图像列表。然后它从 FolderB 中读取所有图像。

然后在将重力设置为 "east" 后,它将 FolderB 中的每个图像合成到 FolderA 中每个相应图像的扩展右半部分。这会产生并排附加图像的效果。

该命令在开头设置了一个变量来保存第一个输入文件列表的文件名,然后将它们用作输出文件的名称并将它们写入FolderC。

如果您使用的是 ImageMagick 版本 7,请使用命令 "magick" 而不是 "convert"。

您可以使用一些 bash 脚本代码来做到这一点。假设您有两个文件夹 A 和 B,其中包含相应的图像名称。您还有一个空文件夹 AB 来保存结果。然后使用 ImageMagick 和 bash 循环代码,你可以这样做:

Collect the names of all the files in folder A and put into an array

Collect the names of all the files in folder B and put into an array

Loop over the number of images in the folders

Process them with ImageMagick +append and save to folder AB


outdir="/Users/fred/desktop/AB"
aArr=(`find /Users/fred/desktop/A -type f -iname "*.jpg" -o -iname "*.png"`)
numA="${#aArr[*]}"
bArr=(`find /Users/fred/desktop/B -type f -iname "*.jpg" -o -iname "*.png"`)
numB="${#bArr[*]}"
if [ $numA -eq $numB ]; then
for ((i=0; i<numA; i++)); do
nameA=`basename "${aArr[$i]}"`
nameA=`convert "$nameA" -format "%t" info:`
nameB=`basename "${bArr[$i]}"`
nameB=`convert "$nameB" -format "%t" info:`
convert "${aArr[$i]}" "${aArr[$i]}" +append ${outdir}/${nameA}_${nameB}.jpg
done
fi

我不在电脑附近进行全面测试,但这对我来说似乎最简单:

#!/bin/bash

# Goto directory A
cd A

# For each file "f" in A
for f in *.png; do
    # Append corresponding file from B and write to AB
    convert "$f" ../B/"$f" +append ../AB/"$f"
done

或使用 GNU Parallel 一次完成所有操作!

cd A
parallel convert {} ../B/{} +append AB/{} ::: *.png