2017-01-17 19 views
1

У меня есть два изображения:Скопировать круг изображения А в изображение В

  • a.jpg
  • b.jpg

оба изображения являются квадрат (100х100 пикселей). Я хочу вырезать круг с радиусом 50 из изображения a.jpg и вставить его в середине изображения b.jpg. Я хочу сохранить результат в c.jpg.

Как это сделать с помощью средств командной строки Linux? Мне нужно сделать это в сценарии оболочки.

ответ

4

Можно использовать множество различных методов. ImageMagick имеет FX language, который может выполнять сложные вычисления.

convert a.jpg b.jpg -fx 'Wi=w/2; Hi=h/2; hypot(Wi-i, Hi-j) < 50 ? u : v' c.jpg 

Например ...

convert -size 100x100 PLASMA: a.jpg 

a.jpg

convert -size 100x100 GRADIENT:LIME-ORANGE b.jpg 

b.jpg

convert a.jpg b.jpg -fx 'hypot(50-i, 50-j) < 50 ? u : v' c.jpg 

c.jpg

Обновление с помощью другой техники.

Более быстрый подход может заключаться в использовании маски (ов) изображения формы, которую вы хотите обрезать, и составлять/комбинировать ее между обоими изображениями. Для этого потребуется формат, поддерживающий альфа-каналы, но только для начальной работы. Например ...

Создайте маску круга и скопируйте значения в альфа-канал.

convert -size 100x100 xc:White -fill Black \ 
     -draw 'circle 50 50 50 5' -alpha Copy mask.png 

mask.png

convert \(a.png mask.png -alpha Set -compose Dst_Out -composite \) \ 
     b.png -compose Dst_Atop -composite c.png 

c.png

1

подход Эрик гораздо более емким, и, вероятно, предпочтительнее, но вот еще один способ в любом случае. Я был очень экологически осведомленными и рециркуляция ;-) его начала изображения:

magick b.jpg \(a.jpg \(+clone -threshold 101% -fill white -draw "circle 49,49, 49,99" \) -channel-fx '| gray=>alpha' \) -flatten result.png 

Это говорит ... «Load b.jpg в качестве фона нагрузки a.jpg, а затем создать маску прозрачности путем клонирования весь a.jpg установив его. черный и нарисовал в нем белый круг и нажал его на альфа-канал. Затем сгладьте, что поверх b.jpg «.

Результат такой же, как у Эрика.

 Смежные вопросы

  • Нет связанных вопросов^_^