我想要更改此图像的黑色边框: http://dev.loungeup.net/im/ 在PHP中使用Imagick透明。Imagick。将颜色更改为透明
结果图像应该有可见的灰色边框,可见的灰色边框内的图像以及灰色边框外的所有内容(今天是黑色)应该是透明的,并让底层内容(例如HTML页面中)可见。
我已经通过了几次文档,并尝试了几个解决方案,但没有弄清楚如何实现它。
任何帮助表示赞赏。
感谢
我想要更改此图像的黑色边框: http://dev.loungeup.net/im/ 在PHP中使用Imagick透明。Imagick。将颜色更改为透明
结果图像应该有可见的灰色边框,可见的灰色边框内的图像以及灰色边框外的所有内容(今天是黑色)应该是透明的,并让底层内容(例如HTML页面中)可见。
我已经通过了几次文档,并尝试了几个解决方案,但没有弄清楚如何实现它。
任何帮助表示赞赏。
感谢
这里,你可以使用一个方法,类似于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
:输出图像
这里的结果:
不幸的是,你可以看到,这种方法仍有与您提供的图片有些暗像素,因为边界不是纯黑色,并融合了与内部的灰色边界位,并且图像本身是非常小的。
如果您有更高质量的源图像,或者更大的图像,然后在修改后可以缩小图像,则会获得更好的结果。
如果你被这些小图片卡住(或者如果你只是想用另一种方法),我会建议去一个不同的路线,你创建自己的面具形状,它只是比原始照片的形状小,然后加回你自己的灰色边框。下面我汇总了一个这个过程的例子。
这种方法的一个可能的命令是:
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在一个命令中执行此操作,但这并不容易。
以上的结果:
关于最后一点,我不知道您是否使用PHP的Imagick或ImageMagick的命令行。几年前我尝试过使用Imagick,但很快就因缺乏文档而与命令行相比感到沮丧(但也许这已经发生了变化)。相反,我执行来自PHP的命令(例如,从exec()
或passthru()
)。一些或许多其他人可能会告诉你,你永远不应该从PHP执行shell命令,但只要你小心翼翼地逃避任何论点,我还没有看到一个令人信服的论点反对这样做。然后,您将获得整个Imagemagick文档(http://www.imagemagick.org/Usage/)。
干杯。
你知道如何在不知道图形大小的情况下从右下角进行洪水填充吗? – alfC 2015-08-01 17:49:00
@alfC旋转180度,填满水然后旋转回来:-) – 2015-11-24 10:36:32