【问题标题】:PHP - change background color to transparentPHP - 将背景颜色更改为透明
【发布时间】:2020-12-18 01:40:15
【问题描述】:

我需要将 PNG 图片 (https://chart.googleapis.com/chart?cht=lxy&chd=e:AACIERGZIiKqMzO7RETMVVXdZmbud3f.iIkQmZohqqsyu7xDzM1U3d5l7u92,hhiIivfFmZZmcCY.YYZmTgdQjWd3kk6g880asfu7r4sf4E22tGtGsfzzmZj9&chds=0.0,1.0&chs=105x75&chma=1,0,1,1&chco=42b6c9ff&chls=2.5,1.0,0.0&chxl=0:%7C%7C1:%7C%7C2:%7C) 的背景颜色更改为透明。我使用以下在我看来是正确的代码:

$picture = imagecreatefrompng("https://chart.googleapis.com/chart?cht=lxy&chd=e:AACIERGZIiKqMzO7RETMVVXdZmbud3f.iIkQmZohqqsyu7xDzM1U3d5l7u92,hhiIivfFmZZmcCY.YYZmTgdQjWd3kk6g880asfu7r4sf4E22tGtGsfzzmZj9&chds=0.0,1.0&chs=105x75&chma=1,0,1,1&chco=42b6c9ff&chls=2.5,1.0,0.0&chxl=0:%7C%7C1:%7C%7C2:%7C");

$img_w = imagesx($picture);
$img_h = imagesy($picture);

imagealphablending($picture, false);        
imagesavealpha($picture, true);

$rgb =  imagecolorexact ($picture, 255,255,255);//imagecolorat($picture, 50, 50);
imagecolortransparent($picture, $rgb);

imagepng($picture, '../images/chart2.png');
imagedestroy($picture);

我也使用imagecolorat 来检测准确的颜色,但结果是一样的——它不起作用(背景是白色的(不透明))!我的错误是什么?

可能的重复:PHP: How to make a green area (background) in an image transparent?imagecolortransparent in PHP not working

【问题讨论】:

    标签: php gd


    【解决方案1】:

    我已经解决了这个问题:

    <? 
    $picture = imagecreatefrompng("../images/chart.png");
    
    $img_w = imagesx($picture);
    $img_h = imagesy($picture);
    
    $newPicture = imagecreatetruecolor( $img_w, $img_h );
    imagesavealpha( $newPicture, true );
    $rgb = imagecolorallocatealpha( $newPicture, 0, 0, 0, 127 );
    imagefill( $newPicture, 0, 0, $rgb );
    
    $color = imagecolorat( $picture, $img_w-1, 1);
    
    for( $x = 0; $x < $img_w; $x++ ) {
        for( $y = 0; $y < $img_h; $y++ ) {
            $c = imagecolorat( $picture, $x, $y );
            if($color!=$c){         
                imagesetpixel( $newPicture, $x, $y,    $c);             
            }           
        }
    }
    
    imagepng($newPicture, '../images/chart2.png');
    imagedestroy($newPicture);
    imagedestroy($picture);
    

    我希望它可以帮助别人。

    【讨论】:

      【解决方案2】:
      <?php
        $img = imagecreatefrompng("https://i.stack.imgur.com/4NoTj.png");  //image obj from url
        $bg_color = imagecolorat($img,1,1);  //get color of top-left pixel
        imagecolortransparent($img, $bg_color);  //matching px => transparent
        imagepng($img);  //output png
        imagedestroy($img);  //cleanup
      ?> 
      

      文档:imagecolortransparentimagepng

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        • 1970-01-01
        • 2013-04-17
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        相关资源
        最近更新 更多