php根据GD库生成透明背景图和和合成图片

来源:互联网 发布:淘宝2017虚假交易处罚 编辑:程序博客网 时间:2024/06/06 13:15
//合成图片private function composite($arr) //$arr是图片的路径数组(绝对路径){    $data=$this->transparent($arr);  //先将图片背景改成透明    $path_1 = $data[0];      unset($data[0]);    foreach($data as $key=>$value){    //因为合成图片每次只能合成两张,而我需要合成4张所以循环操作        //将人物和装备图片分别取到两个画布中        $image_1 = imagecreatefrompng($path_1);        $image_2 = imagecreatefrompng($value);        //创建一个和人物图片一样大小的真彩色画布(ps:只有这样才能保证后面copy装备图片的时候不会失真)        $image_3 = imageCreatetruecolor(imagesx($image_1),imagesy($image_1));        //为真彩色画布创建白色背景,再设置为透明        $color = imagecolorallocate($image_3, 255, 255, 255);//白色背景
//$color = imagecolorallocate($image_3, 1000, 1000, 1000);//透明背景或者使用$color = imagecolorallocate($image_3, 255, 0, 0);
imagefill($image_3, 0, 0, $color);
imageColorTransparent($image_3, $color);        
//首先将人物画布采样copy到真彩色画布中,不会失真        
imagecopyresampled($image_3,$image_1,0,0,0,0,imagesx($image_1),imagesy($image_1),imagesx($image_1),imagesy($image_1));        
//再将装备图片copy到已经具有人物图像的真彩色画布中,同样也不会失真        
imagecopymerge($image_3,$image_2, 0,0,0,0,imagesx($image_2),imagesy($image_2), 100);        
unlink($value);        
//将画布保存到指定的gif文件        
imagepng($image_3,$path_1);    
    }
}
//将图片背景改成透明
private function transparent($arr)
{    
$fileurl=array();    
foreach($arr as $key=>$value){        
//将人物和装备图片分别取到两个画布中        
$image_1 = imagecreatefrompng($value);        
//创建一个和人物图片一样大小的真彩色画布(ps:只有这样才能保证后面copy装备图片的时候不会失真)        
$image_2 = imageCreatetruecolor(imagesx($image_1),imagesy($image_1));        
//为真彩色画布创建白色背景,再设置为透明        
$color = imagecolorallocate($image_2, 1000, 1000, 1000);        
imagefill($image_2, 0, 0, $color);        
imageColorTransparent($image_2, $color);        
//首先将人物画布采样copy到真彩色画布中,不会失真        
imagecopyresampled($image_2,$image_1,0,0,0,0,imagesx($image_1),imagesy($image_1),imagesx($image_1),imagesy($image_1));        
//将画布保存到指定的gif文件        
imagepng($image_2,$value);        
$fileurl[]=$value;    
}    
return $fileurl;
}
原创粉丝点击