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

时间:2019-01-09 10:34:02

标签: imagemagick image-manipulation

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

示例背景图片:

enter image description here

示例蒙版:

enter image description here

我想使用imagemagick可以很容易地做到这一点,但是我现在真的不是这个程序,我发现的例子都更加复杂。

我尝试了类似的方法:

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

是不是因为路径不起作用?我是否需要循环,还是有简单的方法?

谢谢

2 个答案:

答案 0 :(得分:2)

由于您有很多图像,它将为您完成所有循环和文件名/目录的拆分,因此我将使用 GNU Parallel

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

请特别注意parallel并测试您打算如何处理:

parallel --dry-run ...

先确定。

{}表示“当前参数”

{/}表示“除去目录部分的当前参数”

:::表示参数的开头。


或者,您可以使用如下循环:

#!/bin/bash

mkdir -p combined
cd Images

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

答案 1 :(得分:1)

我终于找到了一种使用小型bash脚本的方法:

#!/bin/bash

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