使用 imagemagick 将垫调整大小的蒙版应用于裁剪调整大小的图像

Posted

技术标签:

【中文标题】使用 imagemagick 将垫调整大小的蒙版应用于裁剪调整大小的图像【英文标题】:Apply pad-resized mask to crop-resized image with imagemagick 【发布时间】:2014-08-08 20:54:19 【问题描述】:

我有这个 imagemagick 命令,它对图像应用蒙版:

convert \( subject.jpg -resize "370x210^" -gravity Center -crop "370x210+0+0" \) \( mask.png -resize "370x210" -gravity "Center" \) -composite out.png

图像最终具有所需的尺寸,同时保持纵横比。蒙版最终小于目标尺寸,但居中。这一切都很好,正是我想要的。但是,我希望遮罩外的任何内容都被着色(隐藏遮罩外的图像部分)。

这是当前结果:

这就是我要找的:

(请注意,图像的宽度和高度相同,但底部图像上不再出现“侧边栏”。如果蒙版和图像具有相同的纵横比,这两个图像之间不会有差异.)

我尝试了很多不同的方法(与额外的全尺寸白色图像、边框、框架等合成),但我无法获得所需的输出,也无法在网上找到一个好的示例。有什么建议吗?

【问题讨论】:

为什么不给面具额外的bleed? @emcconville ImageMagick 没有 -bleed 选项。你指的是什么? 出血是一种古老的打印技术,与 IM 无关。在此示例中,您将 -extent 遮罩图像以包含超过所有合成图像的更大区域,并将 -trim 作为最后一步将其向下。 【参考方案1】:

使用-draw color 命令将图像蒙版填充到剪切边框。这种技术非常接近印刷品的出血和视频的过度扫描。

示例

给定一个面具......

定义蒙版的边框颜色,即剪裁边界,以及要填充的颜色。

对于这个例子,边框和颜色是黑色的。请注意,我添加了缺少的 -compose 和 -alpha,但这已本地化为我的示例。

convert \
 \( source.jpg -resize "370x210^" -gravity Center -crop "370x210+0+0" \) \
 \( mask.png -resize "370x210" -gravity "Center" \
   -bordercolor black \
   -fill black \
   -draw "color 10,10 filltoborder" \
 \) \
-alpha Off -compose CopyOpacity -composite out.png

source.png

out.png

【讨论】:

以上是关于使用 imagemagick 将垫调整大小的蒙版应用于裁剪调整大小的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的 UITableViewCell 子类的子视图以使用自动调整大小的蒙版?

5-20 将一个图层作为另一个图层的蒙版

Imagemagick 将透明图像裁剪为蒙版

如何在 PHP 中检测图像上的蒙版区域?

如何调整 SVG 剪辑路径的大小?

如何将图像列表中的图像调整为相同的大小