【问题标题】:Copy a circle of image A into image B将图像 A 的一圈复制到图像 B 中
【发布时间】:2017-06-01 23:59:46
【问题描述】:

我有两张图片:

  • a.jpg
  • b.jpg

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

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

【问题讨论】:

    标签: bash imagemagick imagemagick-convert gimp


    【解决方案1】:

    可以使用许多不同的技术。 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
    

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

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

    用另一种技术更新。

    一种更快的方法是利用您希望裁剪的形状的图像蒙版,并在两个图像之间进行合成/合成。它需要一种支持 Alpha 通道的格式,但仅限于初始工作。比如……

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

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

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

    【讨论】:

      【解决方案2】:

      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" 的顶部。

      结果和艾瑞克的一样。

      【讨论】:

        猜你喜欢
        • 2013-04-30
        • 2010-11-06
        • 1970-01-01
        • 2016-04-20
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 2021-06-24
        • 2016-01-23
        相关资源
        最近更新 更多