3

I need to change background color of PNG picture ( 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: 画像の緑色の領域 (背景) を透明にする方法は? PHPの imagecolortransparent が機能しない

4

2 に答える 2

6

私はこの問題を解決しました:

<? 
$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);

それが他の誰かに役立つことを願っています。

于 2013-05-21T04:32:56.820 に答える
4
<?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

于 2013-05-21T02:03:05.410 に答える