php兩張圖片動態合成thinkphp實現二維碼及文字水印合並拼接到背景圖上
實現場景:
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實現水印效果(文字、圖片)PHP
- canvas實現二維碼和圖片合成Canvas
- php兩張圖片合併一張,加文字,並壓縮PHP
- PHP 圖片、文字合成PHP
- PHP 圖片合成(2合1)PHP
- php生成二維碼圖片PHP
- php將兩張身份證圖片合併到一張圖PHP
- 帶動態背景圖的二維碼生成器
- CSS將背景圖片集中在一張圖片上CSS
- 小程式canvan畫布,現兩張圖片合成一張,並儲存到本地
- Java ffmpeg 實現影片加文字/圖片水印功能Java
- 轉:Java新增水印(圖片水印,文字水印)Java
- GD 庫 PNG 透明底圖片新增文字及圖片水印
- 設定二維碼圖片背景透明教程
- PHP 圖片的合併,微信小程式碼合併,文字合併PHP微信小程式
- 滑動拼圖驗證碼水印Logo修改Go
- PHP 修改圖片顏色(生成彩色二維碼)PHP
- El-Upload元件上傳圖片並新增水印元件
- iOS 圖片上新增水印iOS
- css3動態背景圖片程式碼例項CSSS3
- Ueditor上傳圖片自動新增水印(通用圖片檔案)
- 生成帶二維碼圖片並通過微信分享
- PHP實現圖片(檔案)上傳PHP
- 將上傳圖片打上防偽圖片水印並寫入資料庫資料庫
- CSS · 兩種背景圖片CSS
- JavaScript動態設定元素背景圖片JavaScript
- 用canvas實現一個自動識別兩張圖片差異(圖片找不同)的功能Canvas
- css實現的文字位於圖片之上且背景半透明CSS
- 實現簡單的輪播圖(單張圖片、多張圖片)
- Java和PHP兩種方式實現上傳圖片到新浪微博的圖床JavaPHP圖床
- 商品圖片批量加水印,一鍵新增文字、logo圖片水印方法分享Go
- php微擎功能-圖片加水印PHP
- android 自定義ScrollView實現背景圖片伸縮的實現程式碼及思路AndroidView
- 直播平臺原始碼,上傳本地圖片實現個人名片背景圖輪播原始碼地圖
- 基於ZXingAndroid實現生成二維碼圖片和相機掃描二維碼圖片即時解碼的功能Android
- 基於ZXing Android實現生成二維碼圖片和相機掃描二維碼圖片即時解碼的功能Android
- CSS實現的背景圖片替代顏色程式碼CSS
- 自定義上傳圖片拼圖遊戲遊戲