PHP將透明圖片(PNG)合併到JPG圖片上,實現PNG透明部分透明的效果。
阿新 • • 發佈:2019-02-10
有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的,其它的版本沒有測試過。
下面貼一些上面程式碼的測試結果:
目標圖片是這樣的
它的四個角是透明的。
程式碼生成的圖片效果如下:
目標圖片該透明的地方(上下左右四個角)已經透明瞭。