生成海报网上有很多,其主要方法都一致,这个存储只是我不想再去百度了噻
核心方法如下:各位看下就可
/** * 生成宣传海报 * @param array 参数,包括图片和文字 * @param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片 * @return [type] [description] */ function createPoster($config=array(),$filename="") { #如果要看报什么错,可以先注释调这个header if(empty($filename)) header("content-type: image/png"); $imageDefault = [ \'left\'=>0, \'top\'=>0, \'right\'=>0, \'bottom\'=>0, \'width\'=>100, \'height\'=>100, \'opacity\'=>100 ]; $textDefault = [ \'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); } }
然后对应方法调用即可
本人使用方法,看下就行,比较辣鸡
#两张调用 function addTwoimage($reqrcode,$bjimg,$filename) { $reqrcodes = ROOT_PATH . \'/public\'.$reqrcode; //背景图目录 // $reqrcodes = ROOT_PATH . \'/public\'; //背景图目录 $config = array( \'image\'=>array( array( \'url\'=>$reqrcodes, //二维码资源 \'stream\'=>0, \'left\'=>177, \'top\'=>470, \'right\'=>0, \'bottom\'=>0, \'width\'=>400, \'height\'=>400, \'opacity\'=>100 ) ), // \'background\'=>ROOT_PATH . \'public/upload/erweima.jpg\' //背景图目录 \'background\'=>ROOT_PATH . \'public/\'.$bjimg //背景图目录 ); return createPoster($config,$filename); } #多张图片+文字调用 function addTwoimages($reqrcode,$erweima,$name,$total,$filename) { $reqrcodes = ROOT_PATH . \'/public\'.$reqrcode; //合并上图所在路径 $reqrcodes2 = ROOT_PATH . \'/public\'.$erweima; //合并上图所在路径 $config = array( \'text\'=>array( array( \'text\'=>$name, \'left\'=>60, \'top\'=>1020, \'fontPath\'=>ROOT_PATH.\'public/upload/goodsttf/1.ttf\', //字体文件 \'fontSize\'=>28, //字号 \'fontColor\'=>\'0,0,0\', //字体颜色 \'angle\'=>0, ), array( \'text\'=>$total, \'left\'=>60, \'top\'=>1240, \'fontPath\'=>ROOT_PATH.\'public/upload/goodsttf/1.ttf\', //字体文件 \'fontSize\'=>32, //字号 \'fontColor\'=>\'0,0,0\', //字体颜色 \'angle\'=>0, ) ), \'image\'=>array( array( \'url\'=>$reqrcodes, //图片资源路径 \'left\'=>0, \'top\'=>0, \'stream\'=>0, //图片资源是否是字符串图像流 \'right\'=>0, \'bottom\'=>0, \'width\'=>1000, \'height\'=>900, \'opacity\'=>100 ), array( \'url\'=>$reqrcodes2, \'left\'=>620, \'top\'=>940, \'right\'=>0, \'stream\'=>0, \'bottom\'=>0, \'width\'=>340, \'height\'=>340, \'opacity\'=>100 ), ), // \'background\'=>\'qrcode/bjgoods.jpg\', \'background\' => ROOT_PATH.\'public/upload/config/bjgoods.png\', #最底部背景图 ); return createPoster($config,$filename); }
附赠一下我找的文字库,如果各位大大不嫌弃可以直接使用
链接: https://pan.baidu.com/s/1R18B1_og_KwDUgmaOjIHGA 提取码: 1277
2020年08月27日