Imagemagick通过调整大小

时间:2018-04-07 17:20:04

标签: imagemagick imagemagick-convert image-masking

引言

我们说我有这个形象:

enter image description here

对于我在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

结果是:

enter image description here

问题

现在让我们检查下两张图片:

图片2

enter image description here

图片3

enter image description here

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

enter image description here

enter image description here

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

问题

如何避免裁剪问题,并且:

  1. 使修剪过的图像(相对于面具)填满整个面具而不留任何间隙而不会丢失比例?我想,通过调整大小,但如何?
  2. 让调整大小的照片相对于面具居中(重心)?
  3. 非常感谢您的回答。

2 个答案:

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

答案 1 :(得分:1)

您正在获得这些结果,因为蒙版和图像具有两种不同的宽高比和大小。您应该调整蒙版的大小以使其与图像的尺寸完全一致,而不是与您所做的相反。因此,例如下面,我修改了Imagemagick命令,如下所示:

enter image description here

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

enter image description here

注意我添加!到-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

enter image description here