组合参数方法:
/*** [user_qrcode 参数组合]* @param [type] $bgImg [背景图]* @param [type] $codeImg [二维码]* @param string $name [名称]* @param string $remask [备注]* @param string $content [描述]* @param integer $key [生成二维码名称表示]* @return [type] [description]*/
public function user_qrcode($bgImg,$codeImg,$name="我是小洪帽",$remask="邀请您加入XXX 购买有惊喜",$content="长按识别或扫描二维码进入",$key=0){$config = array('text'=>array(array('text'=>$name,'left'=>250,'top'=>815,'fontPath'=>'/public/upload/ttf/simhei.ttf', //字体文件需要增加去下载引入使用'fontSize'=>22, //字号'fontColor'=>'0,0,0', //字体颜色'angle'=>0,'text-aligin' => 'left'),array('text'=>$remask,'left'=>250,'top'=>860,'fontPath'=>'/public/upload/ttf/simhei.ttf', //字体文件需要增加去下载引入使用'fontSize'=>18, //字号'fontColor'=>'143,143,143', //字体颜色'angle'=>0,'text-aligin' => 'left'),array('text'=>'—— '.$content.' ——','left'=>0,'right'=>0,'top'=>970,'fontPath'=>'/public/upload/ttf/simhei.ttf', //字体文件需要增加去下载引入使用'fontSize'=>16, //字号'fontColor'=>'169,169,169', //字体颜色'angle'=>0,'text-aligin' => 'center' //字体居中,只有center有效果,其他无)),'image'=>array(array('url'=>$codeImg, //图片资源路径'stream'=>0,'left'=>50,'top'=>740,'right'=>0,'bottom'=>0,'width'=>180,'height'=>180,'opacity'=>100),),'background'=>$bgImg,);$filename = "/public/upload/share_code/".time().rand(0000,9999).$num.".png";return $this->createPoster($config,$filename);}
海报合成方法
/*** 生成宣传海报* @param array 参数,包括图片和文字* @param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片* @return [type] [description]*/public 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) + 300; //背景高度,这里增加300的高度,底部白色区域$imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight); $color = imagecolorallocate($imageRes, 255, 255, 255); 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); if($val['text-aligin'] == 'center'){$fontBox = imagettfbbox($val['fontSize'], 0, $val['fontPath'], $val['text']);//获取文字所需的尺寸大小//垂直水平居中//imagettftext($imageRes, $val['fontSize'], $val['angle'], ceil(($backgroundWidth - $fontBox[2]) / 2), ceil(($backgroundHeight - $fontBox[1] - $fontBox[7]) / 2), $fontColor, $val['fontPath'], $val['text']);//水平居中imagettftext($imageRes, $val['fontSize'], $val['angle'], ceil(($backgroundWidth - $fontBox[2]) / 2), $val['top'], $fontColor, $val['fontPath'], $val['text']);}else{$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 = imagepng($imageRes,ROOT_PATH.$filename); //保存到本地imagedestroy($imageRes);if(!$res) return false;return $filename;}else{imagepng ($imageRes); //在浏览器上显示imagedestroy($imageRes);} }
效果图: