2012-02-15 115 views
4

我想要更改此图像的黑色边框: http://dev.loungeup.net/im/ 在PHP中使用Imagick透明。Imagick。将颜色更改为透明

结果图像应该有可见的灰色边框,可见的灰色边框内的图像以及灰色边框外的所有内容(今天是黑色)应该是透明的,并让底层内容(例如HTML页面中)可见。

我已经通过了几次文档,并尝试了几个解决方案,但没有弄清楚如何实现它。

任何帮助表示赞赏。

感谢

回答

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

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的和面具带来。png作为第二层(mask.png是黑色背景上的白色圆角矩形形状的照片,但形状略小于原始形状 - 结果将移除原始的灰色和黑色边框)。

-compose CopyOpacity -composite:使用从mask.png original.png

-compose src-over到 “敲除” 的形状:复位复合物的方法,以一个简单的覆盖

new-border.png -composite:覆盖灰色边框(PNG是3像素宽边界,1px的上掩模边缘的每一侧上的透明背景)

clean-result.png:输出图像

我创建mask.png和新border.png在Photoshop中。你可能使用Imagemagick的矢量工具,并使用original.jpg在一个命令中执行此操作,但这并不容易。

以上的结果: Imagemagick Method 2

关于最后一点,我不知道您是否使用PHP的Imagick或ImageMagick的命令行。几年前我尝试过使用Imagick,但很快就因缺乏文档而与命令行相比感到沮丧(但也许这已经发生了变化)。相反,我执行来自PHP的命令(例如,从exec()passthru())。一些或许多其他人可能会告诉你,你永远不应该从PHP执行shell命令,但只要你小心翼翼地逃避任何论点,我还没有看到一个令人信服的论点反对这样做。然后,您将获得整个Imagemagick文档(http://www.imagemagick.org/Usage/)。

干杯。

+0

你知道如何在不知道图形大小的情况下从右下角进行洪水填充吗? – alfC 2015-08-01 17:49:00

+1

@alfC旋转180度,填满水然后旋转回来:-) – 2015-11-24 10:36:32

相关问题