Объедините несколько изображений с одним именем - PullRequest
0 голосов
/ 09 января 2019

У меня есть папка с именем «Изображения» и одна «Маска». В папке «Изображения» 200 изображений, а в папке «Маска» 200 изображений (с прозрачным фоном) с тем же именем. Теперь я хочу всегда комбинировать две картинки с одинаковыми именами, поэтому изображение из папки «Изображение» находится на заднем плане. Изображение одинакового размера.

Пример Фоновое изображение:

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 голосов
/ 10 января 2019

Наконец-то я нашел способ с небольшим bash-скриптом:

#!/bin/bash

for entry in Images/*
do
  name="$(cut -d'/' -f2 <<<"$entry")"
  convert Cells/$name Mask/$name -composite combined/$name
done
0 голосов
/ 09 января 2019

Поскольку у вас много изображений, и он будет выполнять все циклы и разбиение имени файла / каталога, я бы использовал 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
...