0

介绍

假设我有这张图片:

在此处输入图像描述

对于图像,我在https://image.ibb.co/c5Nw6c/Mask.png中应用了遮罩(它是白色的,这就是我在这里设置它的原因)。面具基本上是一个消息气泡,右下角有一个箭头。

命令(在 bash 中)如下:

size=`convert Mask.png -format "%wx%h" info:`
convert \( couple.jpg  -channel rgba -alpha on -resize $size \) Mask.png -compose copy_opacity -composite -compose over -background transparent -flatten png:result.png

结果是:

在此处输入图像描述

问题

现在让我们检查接下来的两个图像:

图 2

在此处输入图像描述

图 3

在此处输入图像描述

如果我们对这两个做同样的事情,我们将得到以下结果:

在此处输入图像描述

在此处输入图像描述

我们在这里看到的是,为了正确应用蒙版,比例必须相似,否则,根据原始图像的大小,它可能会在底部或右侧被裁剪。

问题

如何避免裁剪问题以及:

  1. 使修剪后的图像(相对于蒙版)填充整个蒙版而不留下任何间隙且不丢失比例?我想,通过调整大小,但如何?
  2. 让调整大小的照片相对于蒙版居中(重心)?

非常感谢您的回答。

4

2 回答 2

2

此命令应采用任何输入图像,然后对其进行缩放以填充蒙版。接下来,它将以蒙版为中心的图像与“srcin”合成,以仅显示蒙版为白色的图像部分。它通过展平到白色背景上来完成。输出将是掩码的尺寸。

convert Mask.png image.jpg \
   +distort SRT "0,0 %[fx:t?max(u.w/v.w,u.h/v.h):1] 0 0,0" \
   -shave 1x1 +repage -gravity center -compose srcin -composite \
   -compose over -background white -flatten result.png

这应该适用于 IM 6.8.9 到 IM 6.9.9。

于 2018-04-08T02:32:04.050 回答
1

由于蒙版和图像具有两种不同的纵横比和大小,因此您得到了这些结果。您应该调整蒙版的大小以完全符合图像的尺寸,而不是您所做的其他方式。因此,例如在下面,我修改了您的 Imagemagick 命令,如下所示:

在此处输入图像描述

infile="image.jpg"
size=`convert $infile -format "%wx%h" info:`
convert "$infile"  \( Mask.png -resize $size! \) -compose copy_opacity -composite -compose over -background transparent -flatten png:result.png

在此处输入图像描述

注意我添加了!到 -resize $size!,以便强制掩码适合输入的尺寸。

编辑:如果您不想扭曲蒙版,那么唯一的方法是调整图像大小并填充图像以将其填充到蒙版的大小。在这里,我将背景从透明更改为黑色以显示效果。您可以将其更改回透明。

infile="image.jpg"
size=`convert mask.png -format "%wx%h" info:`
convert \
\( "$infile" -resize $size -background white -gravity center -extent $size \) \
Mask.png \
-compose copy_opacity -composite \
-compose over -background black -flatten \
png:result2.png

在此处输入图像描述

于 2018-04-07T17:43:34.957 回答