Php 透明gif/黑色背景?

Php 透明gif/黑色背景?,php,transparency,Php,Transparency,我有以下内容,除了gif应该是透明的,并且它正在创建一个黑色背景外,它可以工作。如果我将所有(imagesavealpha等)内容更改为$container,那么它将为我添加到该图像中的文本创建一个透明背景。我该如何摆脱黑色背景呢?基本上这是一个签名类型的图像。我也写东西,我觉得你不需要看 $im = imagecreatefromgif("bg.gif"); $container = imagecreatetruecolor(400, 160); imagesavealpha($

我有以下内容,除了gif应该是透明的,并且它正在创建一个黑色背景外,它可以工作。如果我将所有(imagesavealpha等)内容更改为$container,那么它将为我添加到该图像中的文本创建一个透明背景。我该如何摆脱黑色背景呢?基本上这是一个签名类型的图像。我也写东西,我觉得你不需要看

  $im = imagecreatefromgif("bg.gif");

  $container = imagecreatetruecolor(400, 160);
  imagesavealpha($im, true);
  imagealphablending($im, false);

  $trans_colour = imagecolorallocatealpha($im, 0, 0, 0, 127);
  $w = imagecolorallocate($container, 255, 255, 255);

  imagefill($im, 0, 0, $trans_colour);

  imagecopymerge($container, $im, 0, 0, 0, 0, 460, 180, 100);

我使用这两个函数来创建一个新的透明真彩色图像

function image_createtruecolortransparent($x,$y) 
{
    $i = imagecreatetruecolor($x,$y);
    $b = imagecreatefromstring(base64_decode(image_blankpng()));
    imagealphablending($i,false);
    imagesavealpha($i,true);
    imagecopyresized($i,$b,0,0,0,0,$x,$y,imagesx($b),imagesy($b));
    return $i;
}

function image_blankpng()
{
    $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m";
    $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg";
    $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN";
    $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ";
    $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA";
    $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII=";

    return $c;
} 

你需要什么就做什么。只需替换对ImageCreateTureColor(400160)的函数调用;具有图像透明(400160);并包含这两个函数。

此页面在PHP在线手册中非常有用:。我链接到了一个特定的评论,但至少看一看其中的大部分总是一个好主意。

下面的解决方案没有您选择的复杂。它还直接解决了这个问题。

$transparencyIndex = imagecolortransparent($imageSrc);
$transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);

if ($transparencyIndex >= 0) { $transparencyColor = imagecolorsforindex($imageSrc, $transparencyIndex);
}

$transparencyIndex = imagecolorallocate( $imageNew, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue'] ); imagefill($imageNew, 0, 0, $transparencyIndex); imagecolortransparent($imageNew, $transparencyIndex);

$transparencyIndex=imagecolortransparent($imageSrc);
$transparencyColor=array('red'=>255,'green'=>255,'blue'=>255)

如果($transparencyIndex>=0){ $transparencyColor=imagecolorsforindex($imageSrc,$transparencyIndex);
}

$transparencyIndex=imagecolorallocate( $imageNew、$transparencyColor['red']、$transparencyColor['green']、$transparencyColor['blue'] ); imagefill($imageNew,0,0,$transparencyIndex); imagecolortransparent($imageNew,$transparencyIndex);

要调整和存储GIF图像的大小,可以分别使用imagecopyresampled()和imagegif()