【问题标题】:PHP/GD - transparent backgroundPHP/GD - 透明背景
【发布时间】:2013-02-21 05:05:54
【问题描述】:

我想在 PHP 中结合 GD 执行以下操作。不幸的是,ImageMagick 不是一个选项,但这似乎是一个常见的问题,必须找到解决方案,我似乎找不到它。

我想创建一个具有透明背景的 PNG。然后我想在上面画一个矩形,在上面复制一个图像,然后添加一些文本。一种方法如下:

$image = ImageCreateTrueColor (800, 600);
imagecolortransparent ($image, 0); //0 is pure black, the default fill color
imagerectangle (...);
//code to copy an image
imagettftext ($image, ...);
imagepng ($image);

这很好用,只是复制的图像的一部分可能是黑色的,和/或文本可能是黑色的。然后这也变得透明,这是我不想要的。

imagefill ($image, 0,0, 0x7FFF0000);
imagetransparent ($image, 0x7FFF0000);

上面的代码是我在网上找到的,用红色填充,然后让红色变透明。同样,这会导致图像中的所有红色变得透明。我可以选择一种不太可能出现的颜色,但我不能保证这一点。

我有什么遗漏吗?这可以解决吗? 感谢您的回复!

【问题讨论】:

    标签: php gd transparency


    【解决方案1】:

    imagecolortransparent 可能不是您在合并图像时想要的,因为单色透明度很讨厌。

    改为使用透明填充蒙版,如下所示:

    <?php
    $image = imagecreatetruecolor(100, 100);
    
    // Transparent Background
    imagealphablending($image, false);
    $transparency = imagecolorallocatealpha($image, 0, 0, 0, 127);
    imagefill($image, 0, 0, $transparency);
    imagesavealpha($image, true);
    
    // Drawing over
    $black = imagecolorallocate($image, 0, 0, 0);
    imagefilledrectangle($image, 25, 25, 75, 75, $black);
    
    header('Content-Type: image/png');
    imagepng($image);
    

    【讨论】:

    • imagealphablending 在真彩色图像上默认为 true,所以这并没有什么不同 :) 此外,imagecreatetruecolor 创建一个黑色图像,这就是第一段代码使用 imagecolortransparent (0);
    • 在这种情况下,我看不到您的问题。我通过在中心绘制一个黑色矩形来测试上面的内容,它在透明的情况下工作得很好。
    • 真的吗?然后我的设置可能有问题,因为如果我尝试以下代码,我会得到一个蓝色矩形,周围有黑色! $image = imagecreatetruecolor (800,600); imagealphablending ($image, true); imagefilledrectangle ($image, 50,50, 750, 550, imagecolorallocate ($image, 0,0,128)); header ('内容类型:图像/PNG'); imagepng ($image);
    • @user2139592 实际上,不要太快下结论,因为我正在尝试的服务器上有一个修改过的 PHP/GD。我现在正在另一台服务器上试用它。
    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2017-06-30
    相关资源
    最近更新 更多