您可以使用一种类似于 Photoshop 魔术棒工具的方法:
convert original.jpg -alpha set -channel alpha -fuzz 18% \
-fill none -floodfill +0+0 black transparent-border.png
以下是分解的命令:
convert original.jpg: 用原图启动Imagemagick
-alpha set:激活alpha通道
-channel alpha: 让后续操作符作用于 alpha 通道
-fuzz 18%:见-floodfill...
-fill none:见-floodfill...
-floodfill +0+0 black:从左上角(+0+0)开始,在black的-fuzz颜色距离内找到相邻像素并将其替换为-fill
transparent-border.png:输出图片
结果如下:
不幸的是,如您所见,这种方法仍然会在您提供的图像中留下一些暗像素,因为边框不是纯黑色并且与内部灰色边框混合了一点,并且图像本身很小。
如果您有一个质量更好的源图像,或者您可以在修改后缩小尺寸的更大的源图像,您将获得更好的结果。
如果您对这些小图像感到困惑(或者您只想使用其他方法),我建议您采用不同的方法,创建自己的蒙版形状,该形状比原始照片的形状小,然后添加回您自己的灰色边框。我在下面汇总了这个过程的一个示例。
此方法的可能命令是:
convert original.jpg mask.png -compose CopyOpacity -composite \
-compose src-over new-border.png -composite clean-result.png
...坏掉了...
convert original.jpg mask.png: 以原图启动Imagemagick,并引入mask.png作为第二层(mask.png是黑底照片的白色圆角矩形,但形状略小于原件 - 结果将删除原件的灰色和黑色边框)。
-compose CopyOpacity -composite: 使用 mask.png 从 original.png 中“剔除”形状
-compose src-over: 将复合方法重置为简单的覆盖
new-border.png -composite: 覆盖一个灰色边框(png 是一个 3 px 宽的边框,透明背景上遮罩边缘每边各 1px)
clean-result.png:输出图片
我在 Photoshop 中创建了 mask.png 和 new-border.png。您可以使用 Imagemagick 的矢量工具并仅使用 original.jpg 在一个命令中完成所有操作,但这并不容易。
以上结果:
最后一点,我不确定您使用的是 PHP 的 Imagick 还是命令行中的 Imagemagick。几年前,我尝试使用 Imagick,但很快就因为与命令行相比缺乏文档而感到沮丧(不过,这可能已经改变了)。相反,我从 PHP 执行命令(例如,来自 exec() 或 passthru())。一些或许多其他人可能会告诉你,你不应该从 PHP 执行 shell 命令,但只要你小心地转义任何参数,我还没有看到一个令人信服的反对这样做的论据。然后,您将拥有整个 Imagemagick 文档 (http://www.imagemagick.org/Usage/)。
干杯。