Imagemagick 通过调整大小遮蔽图像和拟合 space

Imagemagick masking image and fitting space via resizing

简介

假设我有这张图片:

我在 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. 让调整后的照片相对于蒙版居中(重心)?

非常感谢您的回答。

您得到这些结果是因为蒙版和图像具有两种不同的纵横比和大小。您应该调整蒙版的大小以完全符合图像的尺寸,而不是相反。因此,例如下面,我已将您的 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

此命令应获取任何输入图像,然后对其进行缩放以填充遮罩。接下来,它用 "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。