1. 程式人生 > >PHP將透明圖片(PNG)合併到JPG圖片上,實現PNG透明部分透明的效果。

PHP將透明圖片(PNG)合併到JPG圖片上,實現PNG透明部分透明的效果。

有2張圖片,第一張為背景底圖,jpg格式,簡稱為背景圖片;

第二張為放在背景圖片上的圖片,png格式,有一部分是透明的,簡稱為目標圖片。

要實現的效果是將目標圖片放到背景圖片上,目標圖片透明的部分要透明。

程式碼其實很簡單,最關鍵的地方就是一定要用

imagecopy

這個函式。

所有的程式碼如下:

<?php
	//背景圖片路徑
	$srcurl = './img/japan_map.jpg';
	//目標圖片路徑
	$desurl = './img/begin.png';
	
	//建立源圖的例項
	$src = imagecreatefromstring(file_get_contents($srcurl));
	//建立點的例項
	$des = imagecreatefrompng($desurl);
	//獲取點圖片的寬高
	list($point_w, $point_h) = getimagesize($desurl);
	
	//重點:png透明用這個函式
	imagecopy($src, $des, 970, 1010, 0, 0, $point_w, $point_h);
	imagecopy($src, $des, 930, 1310, 0, 0, $point_w, $point_h);

	header('Content-Type: image/jpeg');
	imagejpeg($src);
	imagedestroy($src);
	imagedestroy($des);

?>

關於imagecopy 函式說明:

bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )

將 src_im 影象中座標從 src_x,src_y 開始,寬度為 src_w,高度為 src_h 的一部分拷貝到 dst_im 影象中座標為 dst_x 和 dst_y 的位置上。

如果沒有使用imagecopy 函式而是用了imagecopymerge 函式,就會導致目標圖片透明的地方不透明瞭。

注:我的php版本是5.6的,其它的版本沒有測試過。

下面貼一些上面程式碼的測試結果:

目標圖片是這樣的

它的四個角是透明的。

程式碼生成的圖片效果如下:


目標圖片該透明的地方(上下左右四個角)已經透明瞭。