在作微信項目開發過程當中,常常會遇到圖片合成的問題,好比將用戶的二維碼合成到宣傳海報中,那麼,遇到這種狀況,利用PHP的GD庫也是很容易實現的,實現步驟以下php
準備好素材:服務器
一、二維碼原圖qrcode.png 尺寸430*430:微信
二、海報原圖test.png 尺寸680*1074:函數
步驟以及源碼:spa
1、首先是將二維碼縮小爲206*206,由於使用微信公衆號接口獲取的二維碼尺寸爲430*430,圖片有點大,因此要縮小成206*206的(此處單位都是px,下面默認也是px)code
1 //已生成二維碼路徑
2 $avatarUrl = '\qrcode.png'; 3 //海報路徑
4 $img = '\test.jpg'; 5 //一、將微信二維碼縮小至206*206,默認是430
6 $thumb = imagecreatetruecolor(206,206); //建立一個新的畫布(縮放後的),從左上角開始填充透明背景
7 $img_content = imagecreatefromjpeg(getcwd().$avatarUrl);//獲取圖片資源 8 //dump($img_content);
9 imagecopyresampled($thumb, $img_content, 0, 0, 0, 0, 206, 206, 430, 430);//核心函數,改變圖片大小 10 $file_name = "\qrcode_1.png"; 11 imagepng($thumb,getcwd().$file_name);//將圖片資源保存到qrcode_1.png中
2、此時在當前目錄就會生成一個206*206的以qrcode_1.png命名的圖片:,而後將縮小的二維碼圖片合成到海報中blog
1 //二、將縮小的二維碼合成到海報中
2 $imgs = imagecreatefromjpeg(getcwd().$img); 3 imagecopy($imgs, $thumb, 237, 589, 0, 0, 206, 206);//核心函數:複製圖片資源到另外一圖片資源中 4 //imagecopy($imgd,$imgw,$x,$y,0,0, $wwidth,$wheight); 5 //$save="image".$dtype; 6 //保存到服務器
7 $f_file_name = "\last.png"; 8 imagepng($imgs,getcwd().$f_file_name); //保存
9 imagedestroy($imgs); 10 imagedestroy($thumb);//銷燬圖片資源
此時,最終的合成已經完成,能夠查看last.png圖片是否符合要求:(其實,細看仍是沒有徹底對好,這就是尺寸計算有問題,稍微修正一下就好)接口
最後須要注意的是:圖片
一、GD庫的imagecreatefrom函數要和圖片真實格式對應,好比圖片是png格式,則使用imagecreatefrompng(),若是是jpg格式,則使用imagecreatefromjpeg(),切不要覺得圖片是以.png結尾就必定是png格式的資源
二、能夠使用php自帶的getimagesize()函數來獲取圖片的真正格式
1 //獲取圖片大小及類型
2 $arr = getimagesize(getcwd().$avatarUrl); 3 dump($arr);die;
執行結果爲:
1 array(7) { 2 [0] => int(430) //圖片寬度像素值 3 [1] => int(430) //圖片高度像素值 4 [2] => int(2) //圖片的類型,返回數字,其中1爲gif,2爲jpg,3爲png,等等 5 [3] => string(24) "width="430" height="430""
6 ["bits"] => int(8) 7 ["channels"] => int(1) 8 ["mime"] => string(10) "image/jpeg" //圖片的mime信息
9 }
三、獲取圖片資源的時候,要經過絕對路徑獲取,相對路徑是獲取不到的