【问题标题】:php GD create a transparent png imagephp GD 创建透明png图片
【发布时间】:2011-08-31 21:02:31
【问题描述】:

我正在尝试创建一个透明的 png 图像并将各种其他 png 和 jpg 分层以创建具有透明度的最终 png。我在创建初始的空透明 png 时遇到问题。它目前具有白色背景。

谁能指出我正确的方向。到目前为止,这是我的代码...

$image = imagecreatetruecolor(485, 500);
imagealphablending($image, false);
imagesavealpha($image, true);
$col=imagecolorallocatealpha($image,255,255,255,127);
imagefill($image, 0, 0, $col);
//imagefilledrectangle($image,0,0,485, 500,$col);


/* add door glass */
$img_doorGlass = imagecreatefrompng("glass/$doorStyle/$doorGlass.png");     
imagecopyresampled($image, $img_doorGlass, 106, 15, 0, 0, 185, 450, 185, 450);              


/* add door */
$img_doorStyle = imagecreatefrompng("door/$doorStyle/$doorStyle"."_"."$doorColor.png");     
imagecopyresampled($image, $img_doorStyle, 106, 15, 0, 0, 185, 450, 185, 450);


$fn = md5(microtime()."door_builder").".png";

if(imagepng($image, "user_doors/$fn", 1)){
  echo "user_doors/$fn";
}       
imagedestroy($image);       

【问题讨论】:

  • 混合模式的改变有帮助吗?没有图像来测试自己,但似乎 png 图像应该混合。否则图像是按照 php 文档和用户提供的注释创建的,所以看不到那里的问题,抱歉

标签: php image transparency gd


【解决方案1】:

尝试替换
$col=imagecolorallocatealpha($image,255,255,255,127);

$col=imagecolorallocate($image,255,255,255);

并尝试取消注释 imagefilledrectangle 行。
我可以测试这段代码 - 给我图片:)

【讨论】:

    【解决方案2】:

    在每个新层上设置imagealphablending($image,true);

    试试这个:

    <?php
    $image = imagecreatetruecolor(485, 500);
    imagealphablending($image, false);
    $col=imagecolorallocatealpha($image,255,255,255,127);
    imagefilledrectangle($image,0,0,485, 500,$col);
    imagealphablending($image,true);
    
    /* add door glass */
    $img_doorGlass = imagecreatefrompng("glass/$doorStyle/$doorGlass.png");
    imagecopyresampled($image, $img_doorGlass, 106, 15, 0, 0, 185, 450, 185, 450);
    imagealphablending($image,true);
    
    /* add door */
    $img_doorStyle = imagecreatefrompng("door/$doorStyle/$doorStyle"."_"."$doorColor.png");
    imagecopyresampled($image, $img_doorStyle, 106, 15, 0, 0, 185, 450, 185, 450);
    imagealphablending($image,true);
    
    $fn = md5(microtime()."door_builder").".png";
    
    imagealphablending($image,false);
    imagesavealpha($image,true);
    if(imagepng($image, "user_doors/$fn", 1)){
        echo "user_doors/$fn";
    }
    imagedestroy($image);
    
    ?>
    

    【讨论】:

    • 不是 100% 确定为什么,但这有效。感谢您的帮助劳伦斯
    • np,它之所以有效,是因为 imagealphablending($image,true); 在添加到图层的每个新 png 上都设置为 true,然后最后在保存之前 imagesavealpha($image,true);,您将它放在顶部。有时它会被重置
    【解决方案3】:

    这段代码对我有用:

    $img=imagecreatetruecolor(180,20);
    imagealphablending($img,false);
    
    $col=imagecolorallocatealpha($img,255,255,255,127);
    imagefilledrectangle($img,0,0,180,20,$col);
    imagealphablending($img,true);
    
    $font=$_SERVER["DOCUMENT_ROOT"].'/fonts/Arial.ttf';
    $color = imagecolorallocate($img, 140, 173, 209);
    imagettftext($img,11,0,5,14,$color,$font,'Text goes here'); 
    
    header('Content-Type: image/png');
    imagealphablending($img,false);
    imagesavealpha($img,true);
    imagepng($img);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2017-11-13
      • 2018-01-13
      • 2018-09-29
      • 2012-07-22
      相关资源
      最近更新 更多