我想更改此图片的黑色边框: http://dev.loungeup.net/im/ 用PHP中的Imagick透明化。
结果图像应该显示灰色边框,灰色边框内的图像可见,灰色边框外的所有内容(今天为黑色)应该是透明的,并且让底层内容(例如在HTML页面中)可见。 / p>
我已多次浏览文档并尝试了几种解决方案,但没有弄清楚如何实现它。
感谢任何帮助。
由于
答案 0 :(得分:13)
这是一种可以使用的方法,类似于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
)开始,找到-fuzz
black
色距离内的相邻像素,并替换为-fill
< / p>
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/)。
干杯。