首页 / PHP / PHP:PNG中的透明区域
PHP:PNG中的透明区域
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP:PNG中的透明区域,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1601字,纯文字阅读大概需要3分钟。
内容图文
![PHP:PNG中的透明区域](/upload/InfoBanner/zyjiaocheng/770/f7208b707d4444e7b67a19f1340f9a19.jpg)
我想在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,1,254) is a color that won't likely occur in your image
$border = 10;
imagefilledrectangle($img, $border, $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, 0);
$base->setImageMatte(true);
$mask = new Imagick();
$mask->newImage(512, 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, 0);
$base->writeImage('after.png');
header("Content-Type: image/png");
echo $base;
?>
内容总结
以上是互联网集市为您收集整理的PHP:PNG中的透明区域全部内容,希望文章能够帮你解决PHP:PNG中的透明区域所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。