PHP實(shí)現(xiàn)生成推廣海報的方法詳解
本文實(shí)例講述了PHP實(shí)現(xiàn)生成推廣海報的方法。分享給大家供大家參考,具體如下:
經(jīng)常有這樣的需求,就是需要在生成推廣海報,包含指定的二維碼,分享出去別人掃碼之后就可以確定用戶推薦關(guān)系。
仔細(xì)分析一下,推廣海報必要的要素就是海報背景圖和二維碼,這兩者都容易生成,但要兩者結(jié)合到一起組合成為一張圖二維還要可以保存到本地便于分享出去,這就是難點(diǎn)了,在H5中可以借助canvas畫出來完成類似于截圖的功能,但放到小程序里邊很多局限性。那么我們直接在后臺生成海報,前臺直接調(diào)用。
前期準(zhǔn)備:
1.海報背景圖,背景圖一般存服務(wù)器,程序本地讀??;
2.推廣二維碼,可以是二維碼圖片鏈接,也可以是字符串圖像流,如果自己生成二維碼,詳見:使用phpqrcode生成二維碼。
方法如下:
/** * 生成宣傳海報 * @param array 參數(shù),包括圖片和文字 * @param string $filename 生成海報文件名,不傳此參數(shù)則不生成文件,直接輸出圖片 * @return [type] [description] */ function createPoster($config=array(),$filename=""){ //如果要看報什么錯,可以先注釋調(diào)這個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); //關(guān)鍵函數(shù),參數(shù)(目標(biāo)資源,源,目標(biāo)資源的開始坐標(biāo)x,y, 源資源的開始坐標(biāo)x,y,目標(biāo)資源的寬高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'=>'https://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);
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP圖形與圖片操作技巧匯總》、《php文件操作總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
php實(shí)現(xiàn)的一段簡單概率相關(guān)代碼
這篇文章主要介紹了php實(shí)現(xiàn)的一段簡單概率相關(guān)代碼,通過數(shù)字的運(yùn)算分析概率統(tǒng)計的原理與使用技巧,需要的朋友可以參考下2016-05-05PHP基于ICU擴(kuò)展intl快速實(shí)現(xiàn)漢字轉(zhuǎn)拼音及按拼音首字母分組排序的方法
這篇文章主要介紹了PHP基于ICU擴(kuò)展intl快速實(shí)現(xiàn)漢字轉(zhuǎn)拼音及按拼音首字母分組排序的方法,結(jié)合實(shí)例形式分析了ICU擴(kuò)展intl的實(shí)現(xiàn)方法與拼音轉(zhuǎn)換、排序等相關(guān)操作技巧,需要的朋友可以參考下2017-05-05php實(shí)現(xiàn)微信公眾平臺賬號自定義菜單類
這篇文章主要介紹了php實(shí)現(xiàn)微信公眾平臺賬號自定義菜單類的相關(guān)資料,需要的朋友可以參考下2015-10-10PHP 清空varnish 緩存的詳解(包括指定站點(diǎn)下的)
本篇文章是對清空varnish的緩存(包括指定站點(diǎn)下的)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php實(shí)現(xiàn)根據(jù)詞頻生成tag云的方法
這篇文章主要介紹了php實(shí)現(xiàn)根據(jù)詞頻生成tag云的方法,涉及php分析與操作字符串以及標(biāo)簽云的生成技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04