PHP:PNG中的透明区域
发布时间:2020-12-13 22:44:09 所属栏目:PHP教程 来源:网络整理
导读:我想在png图像中创建一个透明区域,某种“洞”.所以我可以将这个图像放在一些背景图像的顶部,然后通过那个“洞”看到背景片段.我在一些论坛上发现了这个代码: $imgPath = 'before.png';$img = imagecreatefrompng($imgPath); // load the imagelist($width,$
我想在png图像中创建一个透明区域,某种“洞”.所以我可以将这个图像放在一些背景图像的顶部,然后通过那个“洞”看到背景片段.我在一些论坛上发现了这个代码:
$imgPath = 'before.png'; $img = imagecreatefrompng($imgPath); // load the image list($width,$height) = getimagesize($imgPath); // get its size $c = imagecolortransparent($img,imagecolorallocate($img,255,1,254)); // create transparent color,(255,254) is a color that won't likely occur in your image $border = 10; imagefilledrectangle($img,$border,$width-$border,$height-$border,$c); // draw transparent box imagepng($img,'after.png'); // save 它适用于在png图像中创建透明区域(在本例中为矩形).但是当我将此png图像放在其他图像的顶部时,该区域会失去透明度,因此我最终会在结果图像的中间显示彩色矩形.有人可以帮帮我吗? 解决方法
另一种选择是使用PHP ImageMagick扩展
Imagick.
您可以通过设置Imagick::newImage功能的背景参数来创建矩形,使用ImagickDraw::circle功能设置cicle,关键是使用Imagick::compositeImage和only copying the transparency来应用圆圈.这样可以防止您在顶部有一个带透明圆圈的实心图像;遮罩中透明的所有内容在原始图像上都是透明的. 下面的代码应该可以解决问题(虽然我确信它需要一些调整来满足您的需求:P): <?php $base = new Imagick("before.png"); $base->cropImage(512,512,0); $base->setImageMatte(true); $mask = new Imagick(); $mask->newImage(512,new ImagickPixel("transparent")); $circle = new ImagickDraw(); $circle->setFillColor("black"); $circle->circle(150,150,100,100); $mask->drawImage($circle); $base->compositeImage($mask,Imagick::COMPOSITE_COPYOPACITY,0); $base->writeImage('after.png'); header("Content-Type: image/png"); echo $base; ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |