设为首页 收藏本站
查看: 2685|回复: 0

[经验分享] PHP实现生成推广海报的方法

[复制链接]

尚未签到

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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-650330-1-1.html 上篇帖子: php-fpm占用内存过高分析及解决 下篇帖子: 4.18 php相关配置,限制user_agent,禁止php解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表