2013-05-21 48 views
2

我需要将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)更改为透明。我用下面的代码,在我看来,正确的:PHP - 将背景颜色更改为透明

$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

回答

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

我希望它可以帮助别人。

3
<?php 
$im = 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"); 

$black = imagecolorallocate($im, 250, 250, 250); 
$bg_color = imagecolorat($im,1,1); 
imagecolortransparent($im, $bg_color); 
imagepng($im); 
imagedestroy($im); 
?> 

你可以参考here->imagecolortransparent

+3

你为什么创建'$ image'和'$ img'? – Nolesh