PHP 使用GD庫合成帶二維碼的海報步驟以及源碼實現
在做微信項目開發過程中,經常會遇到圖片合成的問題,比如將用戶的二維碼合成到宣傳海報中,那么,遇到這種情況,利用PHP的GD庫也是很容易實現的,實現步驟如下
准備好素材:
1、二維碼原圖qrcode.png 尺寸430*430:
2、海報原圖test.png 尺寸680*1074:
步驟以及源碼:
一、首先是將二維碼縮小為206*206,因為使用微信公眾號接口獲取的二維碼尺寸為430*430,圖片有點大,所以要縮小成206*206的(此處單位都是px,下面默認也是px)
1 //已生成二維碼路徑
2 $avatarUrl = '\qrcode.png'; 3 //海報路徑
4 $img = '\test.jpg'; 5 //1、將微信二維碼縮小至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中
二、此時在當前目錄就會生成一個206*206的以qrcode_1.png命名的圖片:,然后將縮小的二維碼圖片合成到海報中
1 //2、將縮小的二維碼合成到海報中
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圖片是否符合要求:(其實,細看還是沒有完全對好,這就是尺寸計算有問題,稍微修正一下就好)
最后需要注意的是:
1、GD庫的imagecreatefrom函數要和圖片真實格式對應,比如圖片是png格式,則使用imagecreatefrompng(),如果是jpg格式,則使用imagecreatefromjpeg(),切不要以為圖片是以.png結尾就一定是png格式的
2、可以使用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 }
3、獲取圖片資源的時候,要通過絕對路徑獲取,相對路徑是獲取不到的