合并多个具有相同名称的图像

Combine multiple images with same name

我有一个名为 "Images" 的文件夹和一个名为 "Mask" 的文件夹。在 "Image" 文件夹中有 200 张图像,在 "Mask" 文件夹中有 200 张图像(透明背景)具有相同的名称。我现在想始终合并两张同名图片,因此 "Image" 文件夹中的图片位于背景中。图像大小相同。

示例背景图片:

掩码示例:

我想它应该很容易用 imagemagick 实现,但我现在真的不知道这个程序,我发现的例子都更加复杂。

我试过类似的东西:

convert Images/*.png -draw "image over x,y 0,0 Mask/*.png" combined/*.png

是不是因为路径的问题?我必须循环,还是有简单的方法?

谢谢

因为你有很多图像,它会为你做所有的循环和filename/directory分割,我会像这样使用GNU Parallel

mkdir -p combined
parallel 'convert {} Mask/{/} -composite combined/{/}' ::: Images/*png

小心 parallel 并测试你打算用什么做:

parallel --dry-run ...

先确定一下。

{}表示"the current parameter"

{/}表示"the current parameter stripped of the directory part"

:::表示参数开始


或者,您可以使用这样的循环:

#!/bin/bash

mkdir -p combined
cd Images

for f in *png; do
    convert "$f" ../Mask/"$f" -composite ../combined/"$f"
done

我终于找到了一个小 bash 脚本的方法:

#!/bin/bash

for entry in Images/*
do
  name="$(cut -d'/' -f2 <<<"$entry")"
  convert Cells/$name Mask/$name -composite combined/$name
done