Imagick。将颜色更改为透明

时间:2012-02-15 17:14:29

标签: php png imagemagick imagick

我想更改此图片的黑色边框: http://dev.loungeup.net/im/ 用PHP中的Imagick透明化。

结果图像应该显示灰色边框,灰色边框内的图像可见,灰色边框外的所有内容(今天为黑色)应该是透明的,并且让底层内容(例如在HTML页面中)可见。 / p>

我已多次浏览文档并尝试了几种解决方案,但没有弄清楚如何实现它。

感谢任何帮助。

由于

1 个答案:

答案 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:输出图片

结果如下: Imagemagick Method 1

不幸的是,正如您所看到的,此方法仍然会为您提供的图像留下一些暗像素,因为边框不是纯黑色,而是与内部灰色边框混合,而且图像本身非常小。

如果您拥有质量更好的源图像,或者在修改后可以减小尺寸的较大图像,您将获得更好的结果。

如果您对这些小图片感兴趣(或者如果您只想使用其他方法),我建议您使用不同的路线创建自己的面具形状,该形状仅比原始照片的形状小,然后添加自己的灰色边框。我在下面汇总了这个过程的一个例子。

此方法的可能命令是:

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在一个命令中完成所有操作,但这并不容易。

以上结果: Imagemagick Method 2

最后一点,我不确定你是从命令行使用PHP的Imagick还是Imagemagick。几年前,我尝试使用Imagick但很快就因为缺少文档与命令行相比而感到沮丧(尽管可能已经改变了)。相反,我从PHP执行命令(例如,从exec()passthru())。一些或许多其他人可能会告诉你,你永远不应该从PHP执行shell命令,但只要你小心地逃避任何争论,我还没有看到一个令人信服的论据反对这样做。然后,您将拥有完整的Imagemagick文档(http://www.imagemagick.org/Usage/)。

干杯。