php根據GD庫生成透明背景圖和和合成圖片

//合成圖片
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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章