PHP:PNG中的透明区域

标签 php gd

我想在 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中的透明区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088781/

相关文章:

php - 在 PHP 中,为什么 imagecreatefromjpeg "not a jpeg file"更改为 fatal error ?

php - ZF2维护页面

php - Mysql 数据透视表在 PhpMyadmin 中完全可以工作,但不能在 Php mysqli_query() 中工作

php - move_uploaded_file 不起作用,没有错误

php - 图片上传安全 - 用 GD 重新处理

php - 使用 GD PHP 创建带有文本和透明背景的图像

gd - 尝试在 php 中显示图像时如何显示错误?

PHP/MySQL - 一旦日期与 MySQL 行日期之一匹配就运行函数

PHP + PDF,如何使用 curl 保存下载的 PDF?

php - 从 HTML 表单生成 HTML 文件