php生成二維碼不保存服務(wù)器還有下載功能的實(shí)現(xiàn)代碼
有個(gè)大坑:在phpqrcode類里QRimage::png會(huì)重新定義header為header('content-type : img/png')
此header頭解析不了html代碼,所以在返回完后直接是一張二維碼別的代碼起不了任何作用,所以要返回完之后再重新聲明一下header為header('Content-Type:text/html;charset=utf-8');,我在下邊代碼中聲名過了,標(biāo)紅的就是
1.引入phpqrcode類(php操作二維碼類)
2.調(diào)用encodePNG方法
3.修改encodePNG方法( 加入ob緩存,返回)base64加密后的圖片流
4.將加密后的圖片流返回給前端
5.前端通過img標(biāo)簽輸出
6.下載功能:超鏈接直接加上 download="圖片名稱"
調(diào)用phpqrcode代碼如下
/**
* 活動(dòng)二維碼生成
* @param $text 參數(shù)$text表示生成二位的的信息文本;
* @param $outfile 參數(shù)$outfile表示是否輸出二維碼圖片 文件,默認(rèn)否;
* @param string $level 參數(shù)$level表示容錯(cuò)率,也就是有被覆蓋的區(qū)域還能識(shí)別,分別是 L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);
* @param int $size 參數(shù)$size表示生成圖片大小,默認(rèn)是3;參數(shù)$margin表示二維碼周圍邊框空白區(qū)域間距值;
* @param int $margin
* @param bool $saveandprint 參數(shù)$saveandprint表示是否保存二維碼并顯示。
*/
include_once(ROOT_PATH . '/protected/components/phpqrcode.php');
$link = LinkUrlHelper::getUrl(Yii::app()->user->eid,'ACTIVE_DETAIL',$id);
$h5Url = $link['h5'];
$baseImg = QRimage::encodePNG($h5Url,false);
$this->renderPartial('training_code',['img'=>$baseImg]);
修改后的encodePNG方法
public function encodePNG($intext, $outfile = false,$saveandprint=false)
{
try {
ob_start();
$tab = $this->encode($intext);
$err = ob_get_contents();
ob_end_clean();
if ($err != '')
QRtools::log($outfile, $err);
$maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
ob_start();//開啟ob緩存
QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);
$imageString = base64_encode(ob_get_contents());//將圖片流存入緩存并加密賦值給變量
ob_end_clean();//清楚ob緩存
header('Content-Type:text/html;charset=utf-8');// QRimage::png 會(huì)覆蓋此header頭,所以要重新聲明一下,否則解析不了html代碼。
return "data:image/png;base64,".$imageString;//返回拼接好的串
} catch (Exception $e) {
QRtools::log($outfile, $e->getMessage());
}
}
總結(jié)
以上所述是小編給大家介紹的php生成二維碼不保存服務(wù)器還有下載功能的實(shí)現(xiàn)代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
php while循環(huán)得到循環(huán)次數(shù)
在for循環(huán)中,我們很容易得到循環(huán)次數(shù),因?yàn)槭亲鳛闂l件出現(xiàn)的。在while也可以得到,如下:2013-10-10
Laravel中表單size驗(yàn)證數(shù)字示例詳解
Laravel 的驗(yàn)證功能非常強(qiáng)大,基本上常見的需求都有對應(yīng)的驗(yàn)證規(guī)則,下面這篇文章主要給大家介紹了關(guān)于Laravel中表單size驗(yàn)證數(shù)字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07
淺析THINKPHP的addAll支持的最大數(shù)據(jù)量
這篇文章主要介紹了THINKPHP的addAll支持的最大數(shù)據(jù)量,需要的朋友可以參考下2015-02-02
WordPress中獲取指定分類及其子分類下的文章數(shù)目
這篇文章主要介紹了WordPress中獲取指定分類及其子分類下的文章數(shù)目的方法,文中總結(jié)了一些相關(guān)內(nèi)置函數(shù)的使用,需要的朋友可以參考下2015-12-12
徹底刪除thinkphp3.1案例blog標(biāo)簽的方法
這篇文章主要介紹了徹底刪除thinkphp3.1案例blog標(biāo)簽的方法,以thinkphp3.1框架中的案例blog為基礎(chǔ)介紹了刪除日記時(shí)同步刪除tag冗余數(shù)據(jù)的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12
PHP設(shè)計(jì)模式(一)工廠模式Factory實(shí)例詳解【創(chuàng)建型】
這篇文章主要介紹了PHP設(shè)計(jì)模式 工廠模式Factory,結(jié)合實(shí)例形式詳細(xì)分析了工廠模式的基本概念、原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05

