本文實例講述了PHP實現生成推廣海報的方法。分享給大家供大家參考,具體如下:
經常有這樣的需求,就是需要在生成推廣海報,包含指定的二維碼,分享出去別人掃碼之后就可以確定用戶推薦關系。
仔細分析一下,推廣海報必要的要素就是海報背景圖和二維碼,這兩者都容易生成,但要兩者結合到一起組合成為一張圖二維還要可以保存到本地便于分享出去,這就是難點了,在H5中可以借助canvas畫出來完成類似于截圖的功能,但放到小程序里邊很多局限性。那么我們直接在后臺生成海報,前臺直接調用。
前期準備:
1.海報背景圖,背景圖一般存服務器,程序本地讀取;
2.推廣二維碼,可以是二維碼圖片鏈接,也可以是字符串圖像流,如果自己生成二維碼,詳見:使用phpqrcode生成二維碼。
方法如下:
/** * 生成宣傳海報 * @param array 參數,包括圖片和文字 * @param string $filename 生成海報文件名,不傳此參數則不生成文件,直接輸出圖片 * @return [type] [description]function createPoster($config=array(),$filename= ){ //如果要看報什么錯,可以先注釋調這個header if(empty($filename)) header( content-type: image/png $imageDefault = array( left = 0, top = 0, right = 0, bottom = 0, width = 100, height = 100, opacity = 100 $textDefault = array( text = , left = 0, top = 0, fontSize = 32, //字號 fontColor = 255,255,255 , //字體顏色 angle = 0, $background = $config[ background //海報最底層得背景 //背景方法 $backgroundInfo = getimagesize($background); $backgroundFun = imagecreatefrom .image_type_to_extension($backgroundInfo[2], false); $background = $backgroundFun($background); $backgroundWidth = imagesx($background); //背景寬度 $backgroundHeight = imagesy($background); //背景高度 $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight); $color = imagecolorallocate($imageRes, 0, 0, 0); imagefill($imageRes, 0, 0, $color); // imageColorTransparent($imageRes, $color); //顏色透明 imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background)); //處理了圖片 if(!empty($config[ image ])){ foreach ($config[ image ] as $key = $val) { $val = array_merge($imageDefault,$val); $info = getimagesize($val[ url $function = imagecreatefrom .image_type_to_extension($info[2], false); if($val[ stream ]){ //如果傳的是字符串圖像流 $info = getimagesizefromstring($val[ url $function = imagecreatefromstring $res = $function($val[ url $resWidth = $info[0]; $resHeight = $info[1]; //建立畫板 ,縮放圖片至指定尺寸 $canvas=imagecreatetruecolor($val[ width ], $val[ height imagefill($canvas, 0, 0, $color); //關鍵函數,參數(目標資源,源,目標資源的開始坐標x,y, 源資源的開始坐標x,y,目標資源的寬高w,h,源資源的寬高w,h) imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val[ width ], $val[ height ],$resWidth,$resHeight); $val[ left ] = $val[ left ] 0?$backgroundWidth- abs($val[ left ]) - $val[ width ]:$val[ left $val[ top ] = $val[ top ] 0?$backgroundHeight- abs($val[ top ]) - $val[ height ]:$val[ top //放置圖像 imagecopymerge($imageRes,$canvas, $val[ left ],$val[ top ],$val[ right ],$val[ bottom ],$val[ width ],$val[ height ],$val[ opacity //左,上,右,下,寬度,高度,透明度 //處理文字 if(!empty($config[ text ])){ foreach ($config[ text ] as $key = $val) { $val = array_merge($textDefault,$val); list($R,$G,$B) = explode( , , $val[ fontColor $fontColor = imagecolorallocate($imageRes, $R, $G, $B); $val[ left ] = $val[ left ] 0?$backgroundWidth- abs($val[ left ]):$val[ left $val[ top ] = $val[ top ] 0?$backgroundHeight- abs($val[ top ]):$val[ top imagettftext($imageRes,$val[ fontSize ],$val[ angle ],$val[ left ],$val[ top ],$fontColor,$val[ fontPath ],$val[ text //生成圖片 if(!empty($filename)){ $res = imagejpeg ($imageRes,$filename,90); //保存到本地 imagedestroy($imageRes); if(!$res) return false; return $filename; }else{ imagejpeg ($imageRes); //在瀏覽器上顯示 imagedestroy($imageRes);}
使用示例一:生成帶有二維碼的海報
$config = array( image = array( array( url = qrcode/qrcode.png , //二維碼資源 stream = 0, left = 116, top = -216, right = 0, bottom = 0, width = 178, height = 178, opacity = 100 background = bg/bg1.jpg //背景圖$filename = bg/ .time(). .jpg //echo createPoster($config,$filename);echo createPoster($config);
使用示例二:生成帶有圖像,昵稱和二維碼的海報
$config = array( text = array( array( text = 昵稱 , left = 182, top = 105, fontPath = qrcode/simhei.ttf , //字體文件 fontSize = 18, //字號 fontColor = 255,0,0 , //字體顏色 angle = 0, image = array( array( url = qrcode/qrcode.png , //圖片資源路徑 left = 130, top = -140, stream = 0, //圖片資源是否是字符串圖像流 right = 0, bottom = 0, width = 150, height = 150, opacity = 100 array( url = http://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0 , left = 120, top = 70, right = 0, stream = 0, bottom = 0, width = 55, height = 55, opacity = 100 background = qrcode/bjim.jpg ,$filename = qrcode/ .time(). .jpg //echo createPoster($config,$filename);echo createPoster($config);
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
php實現學生管理系統
使用PHP實現打包zip并下載的功能
以上就是PHP如何生成推廣海報的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答