我是php的ImageMagick和Imagick库的新手,我想知道如何让一切都透明,但只留下png图像中的形状边缘。
我想只留下由鹰的边缘形成的细线,并用透明的颜色填充鹰的内部。
或者作为替代方案,我如何使用带有php和GD库的Image Magick库将黑鹰颜色更改为不透明度为0.4的棕色rgba颜色?
答案 0 :(得分:0)
这样可以检测边缘:
convert eagle.png --edge 3 eagle-edges.png
在PHP中,您可以使用bool Imagick::edgeImage(float $radius)
。
答案 1 :(得分:0)
我设法用这些命令得到了结果,虽然我还没有在其他图像上进行过测试,只有老鹰的那个。
exec('convert eagle.png -charcoal 1 neweagle.png');
exec('convert neweagle.png -transparent white neweagle.png');
我对其他更好的解决方案持开放态度!
如果有人知道如何在没有exec的情况下从php库中执行这些命令,那也会很棒。
答案 2 :(得分:0)
选项1
如果你想让鹰的轮廓变黑并且其他一切都是透明的,你可以使用它:
convert eagle.png -channel RGBA -separate -delete 0-2 -edge 1 -threshold 1 -transparent black +channel -negate result.png
将图像分离为RGBA通道并丢弃除alpha通道以外的所有通道。然后它找到alpha通道的边缘(在黑色上显示为白色)然后使黑色像素透明并将白色像素反转为黑色。
我的PHP实现如下:
<?php
// convert eagle.png -channel RGBA -separate -delete 0-2 -edge 1 -threshold 1 -transparent black +channel -negate result.png
$image=new Imagick('eagle.png');
$image->separateimagechannel(Imagick::CHANNEL_OPACITY);
$image->edgeImage(1);
$image->thresholdImage(1);
$image->transparentPaintImage("black",0.0,10,false);
$image->negateImage(false);
$image->writeimage('result.png');
?>
选项2
如果你想让鹰的黑色身体变成40%不透明的深棕色,你可以这样做:
convert eagle.png -channel RGBA -fill "rgba(101,67,33,0.4)" -fuzz 10% -opaque black result.png
我的PHP实现如下:
<?php
// convert eagle.png -channel RGBA -fill "rgba(101,67,33,0.5)" -fuzz 10% -opaque black answer2.png
$image=new Imagick('eagle.png');
$image->opaquePaintImage("black","rgba(101,67,33,0.4)",10,false,imagick::CHANNEL_ALL);
$image->writeimage('result2.png');
?>