经常有这样的需求,就是需要在生成推广海报,包含指定的二维码,分享出去别人扫码之后就可以确定用户推荐关系。
仔细分析一下,推广海报必要的要素就是海报背景图和二维码,这两者都容易生成,但要两者结合到一起组合成为一张图二维还要可以保存到本地便于分享出去,这就是难点了,在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'=>'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);

PHP实现生成推广海报相关推荐

  1. 手把手教你使用PHP生成推广海报

    在日常的工作中(比如微信小程序),我们经常有这样的需求,就是需要使用程序生成推广海报,然后海报里要包含指定的二维码,这样用户分享出去别人扫码之后就可以确定用户推荐关系. 单独生成海报背景或者单独生成二 ...

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

    本文实例讲述了PHP实现生成推广海报的方法.分享给大家供大家参考,具体如下: 经常有这样的需求,就是需要在生成推广海报,包含指定的二维码,分享出去别人扫码之后就可以确定用户推荐关系. 仔细分析一下,推 ...

  3. 使用 iview 实现PC端生成推广海报与二维码并下载的功能,基于iview Modal 对话框 与 Carousel 走马灯组件实现

    使用 iview 实现PC端生成推广海报与二维码并下载的功能,基于iview Modal 对话框 与 Carousel 走马灯组件实现 前言:最近在对公司网页进行改版的时候遇到一个问题,需要在PC端实 ...

  4. 小程序离屏canvas(createOffscreenCanvas)生成推广海报

    小程序离屏canvas(createOffscreenCanvas)生成推广海报 离屏canvas调用wx.canvasToTempFilePath报错Failed to execute 'drawI ...

  5. 原生PHP上传图片并且裁剪图片生成推广海报

    <?phpini_set('memory_limit', '-1'); /***生成宣传海报* @param array 参数,包括图片和文字* @param string $filename ...

  6. Java 动态生成推广海报,带用户头像、昵称、二维码

    继续上一篇文章的延续,二维码生成好的,那么就把他画到海报上吧. 样例(图一是效果图,图二是模板). 工程代码                 那么这里涉及到的知识如下. 绘制单文字 绘制换行文字 绘制 ...

  7. ios -生成推广海报

    #import "ViewController.h" #import "Masonry.h" @interface ViewController ()@end@ ...

  8. php生成推广二维码海报、合成图片demo

    php生成推广二维码海报.合成图片 1.海报背景图.背景图一般存服务器,程序本地读取: 2.推广二维码.可以是二维码图片链接,也可以是字符串图像流.如果自己生成二维码,详见phpqrcode官网,地址 ...

  9. asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码

    最近做的一个项目中,客户要求用asp生成二维码,然后合并到一张背景图片上,合并生成一张推广海报来,可把我愁坏了,经过一个晚上的努力,成功了,下面把这个:asp生成带参数的二维码并合成推广海报,asp合 ...

最新文章

  1. Java将弃用finalize()方法?
  2. PHP从入门到跑路(二),基础语法,数据库操作
  3. 正则化、交叉验证、泛化能力
  4. 洛谷——P1023 税收与补贴问题
  5. 详解用OpenCV绘制各类几何图形
  6. 陈皓:谈谈职业规划——CSDN对我的采访
  7. weblogic部署启动时报错(weblogic.application.ModuleException)
  8. git stash (保存当前的工作现场)
  9. PID闭环控制系统的Simulink仿真
  10. 计算机病毒实验教程pdf,计算机病毒实验报告-1
  11. 超实用超全 || ZBrush笔刷大合集
  12. NEFU锐格实验一[字符串]
  13. 纯干货:微软漏洞中国第一人黄正——如何用正确姿势挖掘浏览器漏洞(附完整 PPT)
  14. 厦门大学计算机专业,厦门大学计算机科学系专业介绍
  15. Linux du按大小排序
  16. 阻抗和电抗的基本概念
  17. 现代编程语言(1):Rust (铁锈,一文掌握钢铁是怎样生锈的)
  18. android手机舆情分析,基于Android平台的环境公共舆情监督系统研究
  19. Leetcode_27 移除元素小白解法
  20. 深耕MySQL - SQL必知必会

热门文章

  1. 中兴服务器车间,走进中兴通讯车间 探秘智能手机生产链(多图)
  2. python绘图黄金螺旋构图_为什么场景插画构图中要用黄金螺旋线?
  3. 小米电视显示服务器故障,小米电视常见的三大问题分析及解决方法
  4. 硬盘突然变raw格式_磁盘分区变成RAW格式怎么办?手把手教你解决方法
  5. 计算机桌面上常见的图标有,win10白图标修复的方法是什么_win10电脑桌面图标显示白色方块的解决方法-系统城...
  6. python实例方法不可以用类调用_python中可以直接用类调用方法吗
  7. mysql creat datebase_MySQL CREATE DATABASE
  8. 如何下载台湾的硕博论文
  9. Ubuntu18.04录屏并生成gif图片
  10. 红包雨中:Redis 和 Lua 的邂逅