php生成二維碼不保存服務(wù)器還有下載功能的實(shí)現(xiàn)代碼
有個(gè)大坑:在phpqrcode類(lèi)里QRimage::png會(huì)重新定義header為header('content-type : img/png')
此header頭解析不了html代碼,所以在返回完后直接是一張二維碼別的代碼起不了任何作用,所以要返回完之后再重新聲明一下header為header('Content-Type:text/html;charset=utf-8');,我在下邊代碼中聲名過(guò)了,標(biāo)紅的就是
1.引入phpqrcode類(lèi)(php操作二維碼類(lèi))
2.調(diào)用encodePNG方法
3.修改encodePNG方法( 加入ob緩存,返回)base64加密后的圖片流
4.將加密后的圖片流返回給前端
5.前端通過(guò)img標(biāo)簽輸出
6.下載功能:超鏈接直接加上 download="圖片名稱(chēng)"
調(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表示二維碼周?chē)吙蚩瞻讌^(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();//開(kāi)啟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)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
深入理解 PHP7 中全新的 zval 容器和引用計(jì)數(shù)機(jī)制
這篇文章主要介紹了 PHP7 中全新的 zval 容器和引用計(jì)數(shù)機(jī)制的相關(guān)知識(shí), 主要側(cè)重于解釋新 zval 容器中的引用計(jì)數(shù)機(jī)制。需要的朋友可以參考下2018-10-10php加水印的代碼(支持半透明透明打水印,支持png透明背景)
一個(gè)簡(jiǎn)單的打水印代碼(圖片水?。С炙⊥该鞫仍O(shè)置,也支持png透明背景格式圖片打水印2013-01-01基于PHP后臺(tái)的Android新聞瀏覽客戶(hù)端
這篇文章主要為大家詳細(xì)介紹了基于PHP后臺(tái)的Android新聞瀏覽客戶(hù)端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05laravel框架查詢(xún)數(shù)據(jù)集轉(zhuǎn)為數(shù)組的兩種方法
今天小編就為大家分享一篇laravel框架查詢(xún)數(shù)據(jù)集轉(zhuǎn)為數(shù)組的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10php實(shí)現(xiàn)評(píng)論回復(fù)刪除功能
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)評(píng)論回復(fù)刪除功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05關(guān)于ThinkPhp 框架表單驗(yàn)證及ajax驗(yàn)證問(wèn)題
tp數(shù)據(jù)驗(yàn)證有兩種方式,一種是靜態(tài)方式,一種是動(dòng)態(tài)方式,下面小編給大家?guī)?lái)了ThinkPhp 框架表單驗(yàn)證及ajax驗(yàn)證問(wèn)題,感興趣的朋友一起看看吧2017-07-07PHP設(shè)計(jì)模式之裝飾器(裝飾者)模式(Decorator)入門(mén)與應(yīng)用詳解
這篇文章主要介紹了PHP設(shè)計(jì)模式之裝飾器(裝飾者)模式(Decorator),結(jié)合實(shí)例形式詳細(xì)分析了PHP裝飾者模式的概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12php calender(日歷)二個(gè)版本代碼示例(解決2038問(wèn)題)
一個(gè)簡(jiǎn)單的php Calender(日歷),解決了2038問(wèn)題,這樣在32位機(jī)和64位機(jī)上都可以用了,代碼很簡(jiǎn)單,方便修改2013-12-12用HTML/JS/PHP方式實(shí)現(xiàn)頁(yè)面延時(shí)跳轉(zhuǎn)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇用HTML/JS/PHP方式實(shí)現(xiàn)頁(yè)面延時(shí)跳轉(zhuǎn)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07