将图像A的圆圈复制到图像B中

时间:2017-01-17 19:25:45

标签: bash imagemagick imagemagick-convert gimp

我有两张图片:

  • a.jpg
  • b.jpg

两个图像都是正方形(100x100像素)。我想从图像a.jpg中剪切半径为50的圆并将其粘贴到图像b.jpg的中间。我想将结果保存在c.jpg

如何使用Linux命令行工具执行此操作?我需要在shell脚本中执行此操作。

2 个答案:

答案 0 :(得分: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

使用其他技术进行更新。

更快的方法是利用您想要裁剪的形状的图像蒙版,并在两个图像之间构图/合成它。它需要一种支持alpha通道的格式,但仅适用于初始工作。例如......

创建圆形遮罩,并将值复制到Alpha通道。

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 :(得分:1)

Eric的方法更加简洁,可能更可取,但无论如何这是另一种方式。我非常注重环保和回收;-)他的开始图片:

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

那说...... “加载b.jpg作为背景。加载a.jpg,然后通过将整个a.jpg设置为黑色并绘制白色来创建透明蒙版将其圈入并将其推入Alpha通道。然后将其展平在b.jpg的顶部。

结果与Eric的相同。