Php 伊玛吉克。将颜色更改为透明

Php 伊玛吉克。将颜色更改为透明,php,png,imagemagick,imagick,Php,Png,Imagemagick,Imagick,我想更改此图像的黑色边框: 在PHP中使用Imagick透明 结果图像的灰色边框应可见,灰色边框内的图像应可见,灰色边框外的所有内容(现在为黑色)应透明,并使底层内容(例如HTML页面)可见 我已经阅读了几次文档,尝试了几种解决方案,但没有找到实现方法 感谢您的帮助 谢谢这里有一种方法你可以使用,它类似于Photoshop的魔杖工具: convert original.jpg -alpha set -channel alpha -fuzz 18% \ -fill none -floodfill

我想更改此图像的黑色边框: 在PHP中使用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通道

-通道alpha
:让后续操作员对alpha通道进行操作

-fuzz 18%
:请参阅
-floodfill

-无填充
:请参阅
-泛光填充

-floodfill+0+0 black
:从左上角(
+0+0
)开始,找到
-fuzz
颜色距离
black
内的相邻像素,并将其替换为
-fill

透明边框.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中“删除”形状

-在上面组合src
:将复合方法重置为简单覆盖

new-border.png-composite
:覆盖灰色边框(png是一个3像素宽的边框,在透明背景上遮罩边缘的每一侧各1像素)

clean result.png
:输出图像

我在Photoshop中创建了mask.png和new-border.png。您可以使用Imagemagick的矢量工具,并使用original.jpg在一个命令中完成这一切,但这并不容易

上述结果:

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


干杯。

您知道如何在不知道图形大小的情况下从右下角进行整体填充吗?@alfC旋转180度,整体填充,然后旋转回:-)