实现场景:

1,本站注册的推广分销人员需要有自己的独有邀请码,这个邀请码需要转换成二维码,并让推广员保存在手机相册中,分发到其它群中,进行二维码图片推广

2,但是单独二维码过于简陋, 不够吸引眼球.需要加一个好看的背景.

3,同时,每个会员进会员中心,需要自动把自己的邀请码水印到完全一样的背景广告图上,所以.带二维码的推广图要动态生成.每个人都不同.

4,两个图片不能用css定位遮罩的方式假合成,因为这样,没法在微信上长按保存图片.

5,二维码用第三方的接口.我用的是http://qr.topscan.com/api.php?bg=ffffff&fg=000000&el=l&w=200&m=10&text=这是推广码

6,试过用canvas将多图合成单图,电脑上可正常右键保存,但是手机上,没法长按保存为一张图片.参考地址http://www.qdfuns.com/notes/18363/09eb20879937204f90808dd80418cd81.html

最终选择用thinkphp的方式,把thinkphp以外挂插件的形式引入自己项目

一, 首先下载thinkphp 3.2.2版本或上以,php需要5.4版本及以上

下载后,在原网站的根目录中建立水印目录,把thinkphp解压到shuiyin中,目录结构如下

二,在自己网站需要显示二维码图片的模板上增加以下内容

注意,uid_cookie变量表示本站登录会员的邀请码,即会员id,进行固定长度的加密后,放在二维码接口链接中,post到thinkphp中去.以动态生成二维图片.

<a href="javascript:;" onClick="return open_l();" style="margin:0 auto;height:25px;text-align:center;width:70%;display:block;line-height:25px;background:#337ab7;padding:10px;border:solid 1px #eee; border-radius:5px;color: #fff;font-size:16px;">立即邀请</a><div  style="color:red;text-align:center">打开图片后,请长按图片,保存到相册</div><br/><div  style="padding:10px;color:#888"><p>如何推广?</p><br/>1,点击"立即邀请",请将专属二维码保存至相册<br/>2,找到微信好友,将二维码发给对方<br/>3,好友扫码后进入本站会自动注册并成为您的下线<br/>4,如果该好友发展了下线,则他的下线是您的二级下线<br/>5,佣金提现后,24小时内到账</div><img src="" alt="" id="showImg"width="100%"onclick="return close_l();" style="text-align:center;position: fixed;;bottom:0;top:0;z-index:9999999999999999999;left:0;display:none">
<script>
function open_l(){
document.getElementById('showImg').style.display='block';
}
function close_l(){
document.getElementById('showImg').style.display='none';
}$(function(){var json={qrcode:"http://qr.topscan.com/api.php?bg=ffffff&fg=000000&el=l&w=200&m=10&text=<?php echo WEB_PATH; ?>/mobile/user/login/<?php echo $uid_cookie;?>"};$.post('/shuiyin/', json, function(data, textStatus, xhr) {/*optional stuff to do after success */$('#showImg').attr('src','/shuiyin/resource/all/'+data)});})</script>

三,在shuiyin\Application\Home\Controller\IndexController.class.php

上面的默认控制器中增加如下内容

解释,本控制器用于接收上面post过来的邀请码及二维码地址,根据网址匹配,从44位向后的部分,就是邀请码了

dlfile()可以远程读取二维码图片

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends CommonController{public function index(){     if(IS_AJAX){$image = new \Think\Image();$path = I('post.qrcode');$path = I('qrcode');$path = ltrim($path,"\"");$path = rtrim($path,"\"");define('BASE_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../../../'))."/");$path_qr = BASE_PATH.'/resource/qrcode/';$path_bg = BASE_PATH.'/resource/bg.png';$path_all = BASE_PATH.'/resource/all/';
$uid=substr($path, -44);$this->dlfile($path,$path_qr.substr($path, -44).'.png');//echo './shuiyin/resource/qrcode/'.substr($path, -44).'.png';//echo 333;die;//echo $path_qr.substr($path, -44).'.png';die;//echo dirname(__ROOT__);die;//realpath(dirname(__FILE__).'/../')//echo BASE_PATH;die;//echo dirname(file);die;$image->open($path_qr.substr($path, -44).'.png');// 生成一个居中裁剪为120*120的缩略图并保存为thumb.jpg$image->thumb(100, 100,\Think\Image::IMAGE_THUMB_CENTER)->save($path_qr.substr($path, -44).'.png');$location=array(23,366); //图片水印指定位置$image->open($path_bg)->water($path_qr.substr($path, -44).'.png',$location ,80)->save($path_all.substr($path, -44).".png"); $location=array(23,340);//文字水印指定位置$image->open($path_all.substr($path, -44).".png")->text('推广编号 '.$this->_encrypt($uid,'DECODE'),BASE_PATH.'/ThinkPHP/Library/Think/Verify/ttfs/hanyi.ttf',10,'#ffffff',$location)->save($path_all.substr($path, -44).".png");echo substr($path, -44).".png";//echo "<script>self.location.href='".U('/').'./resource/all/'.substr($path, -44).".png"."'</script>";}//$this->theme('Template')->display();}/*加密解密 ENCODE 加密   DECODE 解密*/
public function _encrypt($string, $operation = 'ENCODE', $key = '', $expiry = 0){if($operation == 'DECODE') {$string =  str_replace('_', '/', $string);}$key_length = 4;// if(defined("G_BANBEN_NUMBER")){// $key = md5($key != '' ? $key : System::load_sys_config("code","code"));// }else{// $key = md5($key != '' ? $key : G_WEB_PATH);// }$key="3svssv";$fixedkey = md5($key);$egiskeys = md5(substr($fixedkey, 16, 16));$runtokey = $key_length ? ($operation == 'ENCODE' ? substr(md5(microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';$keys = md5(substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));$string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));$i = 0; $result = '';$string_length = strlen($string);for ($i = 0; $i < $string_length; $i++){$result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));}if($operation == 'ENCODE') {$retstrs =  str_replace('=', '', base64_encode($result));$retstrs =  str_replace('/', '_', $retstrs);return $runtokey.$retstrs;} else {    if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$egiskeys), 0, 16)) {return substr($result, 26);} else {return '';}}
}public function dlfile($file_url, $save_to){$ch = curl_init();curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch,CURLOPT_URL,$file_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $file_content = curl_exec($ch);curl_close($ch);$downloaded_file = fopen($save_to, 'w');fwrite($downloaded_file, $file_content);fclose($downloaded_file);}
}

php两张图片动态合成thinkphp实现二维码及文字水印合并拼接到背景图上相关推荐

  1. Java,图片添加二维码和文字水印,合并为一张图

    在工作中遇到了要把两张图片合并成一张图片的情况,具体场景是用户头像➕二维码➕背景图 本着不重复造轮子的想法,搜索了hutool的utils包,还真让我找到了一个cn.hutool.core.img.I ...

  2. Java 生成微信扫描的二维码,跳转到指定网址,图片增加二维码及文字水印

    两种场景: 1.图片海报中加二维码 2.二维码中间加入指定图标 注意点:字体要再设置一下清晰度,要不特别模糊. graph.setRenderingHint(RenderingHints.KEY_TE ...

  3. Vue - H5 生成带二维码和文案的宣传海报(可自定义二维码扫描后的内容、海报背景图、文案文字、宽高间距等)用 HTML 写可 DIY 的海报,做完后转为图片供用户保存和转发下载

    前言 这种需求常见于内容分享时,需要自动生成海报(图片)供用户保存或截图转发,网上的大部分教程都太乱且有 BUG. 本文将带您从 0-1 一路复制,完成一个兼容性好.健壮.注释详细的示例, 开箱即用, ...

  4. Android 图片合成海报生成二维码,指定文字。

    一 ,图片合成,海报增加二维码,文字,或者用户ID.先看图 这个是没有合成之前的图. 合成之后的图. . 使用到的技术点 1,图片Glide 2, banner2.0 3, zxing class M ...

  5. 生成二维码附带文字信息

    生成二维码写入PDF文件 目录 生成二维码写入PDF文件 前言 一.引入依赖 二.生成二维码 1.创建实体类 2.创建QRCodeUtil 3.生成单条二维码 4.批量生产二维码 三.生成二维码写入P ...

  6. 二维码图片文字居中问题

      前两天在为"批量生成二维码压缩并下载功能"做技术选型时,遇到了在不同服务器文字居中效果不一致问题,一直觉得是在不同系统对绘制文字的开始位置有问题引起,今天找到了解决方法,记录一 ...

  7. PHP批量生成底部带编号二维码(二维码生成+文字生成图片+图片拼接合并)

    PHP批量生成带底部编号二维码(二维码生成+文字生成图片+图片拼接合并) 需求: 输入编号如 : cb05-0000001  至 cb05-0000500 批量生成 以编号为名称的下图二维码,然后压缩 ...

  8. java在底图上生成二维码以及文字

    java在底图上生成二维码以及文字 1.添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId> ...

  9. 移动式无线蓝牙RFID+二维码扫描一体机|读卡器HX-R58C-B在安卓与苹果手机上如何操作?

    移动式无线蓝牙RFID+二维码扫描一体机|读卡器HX-R58C-B是一款基于条码识别.RFID无线射频识别技术并结合蓝牙通讯的一款支持一维码/二维码/13.56M/125Khz非接触式射频卡专用读卡器 ...

最新文章

  1. LVS实现负载均衡及高可用
  2. python中国-一个身居中国的法国程序员谈Python与PHP
  3. Django 框架 数据库操作
  4. onlyoffice 收费不_西班牙银行开始泛滥收费,柜面取钱也要手续费
  5. 如何将HBuilder中的项目Push至Gitee中!
  6. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流
  7. 2021中国短视频和直播电商行业人才发展报告
  8. 使用属性升级MyBank >> 掌握自定义方法的定义及调用 1214
  9. Java学习笔记13--比较器(Comparable、Comparator)
  10. org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
  11. linux落字效果代码,Linux 用echo输出带特效的字体
  12. 【图像隐写】基于matlab DWT数字水印嵌入+提取+攻击【含Matlab源码 622期】
  13. 把ts自动合并 下载网页视频并自动合成视频
  14. android锁屏界面布局修改,android 修改锁屏界面
  15. 蓝鲸作业流程编排--参数使用
  16. 思维导图怎么画?原来思维导图还可以这样绘制
  17. c++灵魂科普(1)
  18. 【计算机图形学】基于OpenGL的中点Bresenham算法画直线
  19. 微信支付宝刷脸支付竞争已经枕戈待旦
  20. 2000-2019年省级农业绿色全要素生产率原始测算数据和结果数据

热门文章

  1. 如何在ps添加箭头_Photoshop怎么画箭头 三种方法任你选择
  2. (web)个人项目(挖宝网)
  3. 阿里微服务质量保障系列(一):微服务知多少
  4. 大牛深入讲解!java语言程序设计第二版答案朱庆生
  5. python研究股价_用python处理月度股价数据
  6. 基于vue3的京东nutui组件库的表单校验规则:怎样进行表单验证?怎样只使用指定的某一个规则进行校验呢?
  7. 【恒指早盘分析】9.10恒指今日总结及后市思路
  8. 浅谈物联网时代设备加密的重要性
  9. 数据与广告系列二十四:效果广告后定向时代如何逆流而上
  10. CSS常用水平垂直居中的几种方法