ImageMagick:如何为特定边缘创建撕页效果?

ImageMagick: How to create torn page effect for specifc edges?

ImageMagick 文档提供了有关如何创建撕裂页面效果的指导 (https://www.imagemagick.org/Usage/thumbnails/#torn)。然而,在他们的实施中,所有的边缘都被撕裂了。假设我只想撕掉图像的底部或顶部。我怎样才能使用 ImageMagick 实现这样的事情?

使用 -extent 运算符简单地增加顶部和侧面。

convert zelda.png -background pink -extent 148x138-10-10  extent.png

(添加粉红色背景以便在堆栈上可见)

应用使用文档中的效果。

convert extent.png \( +clone -alpha extract -virtual-pixel black \
    -spread 10 -blur 0x3 -threshold 50% -spread 1 -blur 0x.7 \) \
    -alpha off -compose Copy_Opacity -composite torn.png

然后裁剪回原始图像大小。

convert torn.png -crop 128x129+10+10 output.png

更新

如果不想使用几何图形,可以组合使用-border-shave & -chop

convert zelda.png -bordercolor pink  -border 10x10 -gravity South -chop 0x10  extent.png
convert extent.png \( +clone -alpha extract -virtual-pixel black \
    -spread 10 -blur 0x3 -threshold 50% -spread 1 -blur 0x.7 \) \
    -alpha off -compose Copy_Opacity -composite torn.png
convert torn.png -shave 10x -chop 0x10 output.png

.. 当然,这一切都可以通过一个命令完成。

convert zelda.png -bordercolor pink  -border 10x10 -gravity South -chop 0x10  \
    \( +clone -alpha extract -virtual-pixel black -spread 10 -blur 0x3 -threshold 50% \
    -spread 1 -blur 0x.7 \) -gravity Forget -alpha off -compose Copy_Opacity -composite \
    -shave 10x -chop 0x10 output.png 

有多种方法可以使用 ImageMagick 创建撕边效果。这是另一个使用 IM 版本 6 和 *nix 语法的示例命令。这应该对任何输入图像的顶部边缘应用撕裂效果,同时保持图像的原始尺寸。

convert input.png -alpha set -background black -fill white \
   \( +clone -colorize 100 -gravity south -chop 0x6 -splice 0x6 \
   -spread 6 -paint 2 +transparent white -blur 0x0.5 \) \
   -background none -compose dstin -composite torn.png

这会在括号内创建一个白色蒙版。然后切掉少量 "torn" 边缘,并拼接一条黑色条带代替它。随机撕裂的边缘是在蒙版的白色和黑色区域之间使用“-spread”和“-paint”创建的。之后,在括号外,该蒙版用于将透明撕裂区域应用于输入图像。

要将效果应用于底部边缘,只需将“-gravity north”更改为“-gravity south”即可。

要在左侧或右侧制作撕边,将重力设置更改为 "west" 或 "east",并将“-chop”和“-splice”操作的值从“0x6”到“6x0”。

通过将 "convert" 命令更改为 "magick"。这应该与使用 ImageMagick 版本 7 的方式相同。

要在 Windows 中使用它,请删除将括号从“\(...\)”转义为“(...)”的反斜杠,并将续行反斜杠更改为“\”插入符号“^”。