• 售前

  • 售后

热门帖子
入门百科

PHP实现生成推广海报的方法详解

[复制链接]
岳兄弟散养家鸡 显示全部楼层 发表于 2021-10-25 19:25:45 |阅读模式 打印 上一主题 下一主题
本文实例讲述了PHP实现天生推广海报的方法。分享给大家供大家参考,详细如下:
常常有这样的需求,就是必要在天生推广海报,包含指定的二维码,分享出去别人扫码之后就可以确定用户保举关系。
细致分析一下,推广海报必要的要素就是海报背景图和二维码,这两者都容易天生,但要两者团结到一起组合成为一张图二维还要可以生存到本地便于分享出去,这就是难点了,在H5中可以借助canvas画出来完成类似于截图的功能,但放到小程序里边许多局限性。那么我们直接在后台天生海报,前台直接调用。
前期预备:
1.海报背景图,背景图一般存服务器,程序本地读取;
2.推广二维码,可以是二维码图片链接,也可以是字符串图像流,假如自己天生二维码,详见:使用phpqrcode天生二维码。
方法如下:
  1. /**
  2. * 生成宣传海报
  3. * @param array  参数,包括图片和文字
  4. * @param string  $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片
  5. * @return [type] [description]
  6. */
  7. function createPoster($config=array(),$filename=""){
  8.   //如果要看报什么错,可以先注释调这个header
  9.   if(empty($filename)) header("content-type: image/png");
  10.   $imageDefault = array(
  11.     'left'=>0,
  12.     'top'=>0,
  13.     'right'=>0,
  14.     'bottom'=>0,
  15.     'width'=>100,
  16.     'height'=>100,
  17.     'opacity'=>100
  18.   );
  19.   $textDefault = array(
  20.     'text'=>'',
  21.     'left'=>0,
  22.     'top'=>0,
  23.     'fontSize'=>32,       //字号
  24.     'fontColor'=>'255,255,255', //字体颜色
  25.     'angle'=>0,
  26.   );
  27.   $background = $config['background'];//海报最底层得背景
  28.   //背景方法
  29.   $backgroundInfo = getimagesize($background);
  30.   $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
  31.   $background = $backgroundFun($background);
  32.   $backgroundWidth = imagesx($background);  //背景宽度
  33.   $backgroundHeight = imagesy($background);  //背景高度
  34.   $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
  35.   $color = imagecolorallocate($imageRes, 0, 0, 0);
  36.   imagefill($imageRes, 0, 0, $color);
  37.   // imageColorTransparent($imageRes, $color);  //颜色透明
  38.   imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
  39.   //处理了图片
  40.   if(!empty($config['image'])){
  41.     foreach ($config['image'] as $key => $val) {
  42.       $val = array_merge($imageDefault,$val);
  43.       $info = getimagesize($val['url']);
  44.       $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
  45.       if($val['stream']){   //如果传的是字符串图像流
  46.         $info = getimagesizefromstring($val['url']);
  47.         $function = 'imagecreatefromstring';
  48.       }
  49.       $res = $function($val['url']);
  50.       $resWidth = $info[0];
  51.       $resHeight = $info[1];
  52.       //建立画板 ,缩放图片至指定尺寸
  53.       $canvas=imagecreatetruecolor($val['width'], $val['height']);
  54.       imagefill($canvas, 0, 0, $color);
  55.       //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
  56.       imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
  57.       $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
  58.       $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
  59.       //放置图像
  60.       imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度
  61.     }
  62.   }
  63.   //处理文字
  64.   if(!empty($config['text'])){
  65.     foreach ($config['text'] as $key => $val) {
  66.       $val = array_merge($textDefault,$val);
  67.       list($R,$G,$B) = explode(',', $val['fontColor']);
  68.       $fontColor = imagecolorallocate($imageRes, $R, $G, $B);
  69.       $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
  70.       $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];
  71.       imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
  72.     }
  73.   }
  74.   //生成图片
  75.   if(!empty($filename)){
  76.     $res = imagejpeg ($imageRes,$filename,90); //保存到本地
  77.     imagedestroy($imageRes);
  78.     if(!$res) return false;
  79.     return $filename;
  80.   }else{
  81.     imagejpeg ($imageRes);     //在浏览器上显示
  82.     imagedestroy($imageRes);
  83.   }
  84. }
复制代码
使用示例一:天生带有二维码的海报
  1. $config = array(
  2.   'image'=>array(
  3.     array(
  4.       'url'=>'qrcode/qrcode.png',     //二维码资源
  5.       'stream'=>0,
  6.       'left'=>116,
  7.       'top'=>-216,
  8.       'right'=>0,
  9.       'bottom'=>0,
  10.       'width'=>178,
  11.       'height'=>178,
  12.       'opacity'=>100
  13.     )
  14.   ),
  15.   'background'=>'bg/bg1.jpg'          //背景图
  16. );
  17. $filename = 'bg/'.time().'.jpg';
  18. //echo createPoster($config,$filename);
  19. echo createPoster($config);
复制代码
使用示例二:天生带有图像,昵称和二维码的海报
  1. $config = array(
  2.   'text'=>array(
  3.     array(
  4.       'text'=>'昵称',
  5.       'left'=>182,
  6.       'top'=>105,
  7.       'fontPath'=>'qrcode/simhei.ttf',     //字体文件
  8.       'fontSize'=>18,             //字号
  9.       'fontColor'=>'255,0,0',       //字体颜色
  10.       'angle'=>0,
  11.     )
  12.   ),
  13.   'image'=>array(
  14.     array(
  15.       'url'=>'qrcode/qrcode.png',       //图片资源路径
  16.       'left'=>130,
  17.       'top'=>-140,
  18.       'stream'=>0,             //图片资源是否是字符串图像流
  19.       'right'=>0,
  20.       'bottom'=>0,
  21.       'width'=>150,
  22.       'height'=>150,
  23.       'opacity'=>100
  24.     ),
  25.     array(
  26.       'url'=>'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0',
  27.       'left'=>120,
  28.       'top'=>70,
  29.       'right'=>0,
  30.       'stream'=>0,
  31.       'bottom'=>0,
  32.       'width'=>55,
  33.       'height'=>55,
  34.       'opacity'=>100
  35.     ),
  36.   ),
  37.   'background'=>'qrcode/bjim.jpg',
  38. );
  39. $filename = 'qrcode/'.time().'.jpg';
  40. //echo createPoster($config,$filename);
  41. echo createPoster($config);
复制代码
更多关于PHP相干内容感兴趣的读者可查看本站专题:《PHP图形与图片使用本事汇总》、《php文件使用总结》、《PHP数组(Array)使用本事大全》、《PHP根本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序操持入门教程》、《PHP网络编程本事总结》、《php字符串(string)用法总结》、《php+mysql数据库使用入门教程》及《php常见数据库使用本事汇总》
盼望本文所述对大家PHP程序操持有所帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作