利用yii2生成二維碼的具體步驟

利用yii2生成二維碼的具體步驟

生成二維碼的具體步驟如下所示:

1、在官網(wǎng)下載類庫

在官網(wǎng)下載類庫后,確保當前php環(huán)境支持GD2,然后我們只需要使用phpqrcode.php就可以生成二維碼了。

phpqrcode.php提供了一個關(guān)鍵的png()方法,其中

  • 參數(shù)$text表示生成二位的的信息文本;

  • 參數(shù)$outfile表示是否輸出二維碼圖片 文件,默認否;

  • 參數(shù)$level表示容錯率,也就是有被覆蓋的區(qū)域還能識別,分別是 L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);?

  • 參數(shù)$size表示生成圖片大小,默認是3;參數(shù)$margin表示二維碼周圍邊框空白區(qū)域間距值;

  • 參數(shù)$saveandprint表示是否保存二維碼并顯示。

2、下載后把解壓后的phpqrcode文件夾放到extensions文件夾下,如下圖:

利用yii2生成二維碼的具體步驟

3、引入類

YII::$enableIncludePath?=?false; Yii::import?('application.extensions.phpqrcode.phpqrcode',?1?);

4、具體代碼

public?function?actionQrcode(){ ????????$this->breadcrumbs=array_merge($this->breadcrumbs,array( ????????????????'生成二維碼' ????????)); ????????$qrcode_path=''; ????????$file_tmp_name=''; ????????$errors=array(); ????????if(!empty($_POST)){ ????????????$content?=?trim($_POST['content']);?//二維碼內(nèi)容 ????????????$contentSize=$this->getStringLength($content); ????????????if($contentSize>290){ ????????????????$errors[]='字數(shù)過長,不能多于150個字符!'; ????????????} ????????????Yii::$enableIncludePath?=?false; ????????????Yii::import?('application.extensions.phpqrcode.phpqrcode',?1?); ????????????if(isset($_FILES['upimage']['tmp_name'])?&&?$_FILES['upimage']['tmp_name']?&&?is_uploaded_file($_FILES['upimage']['tmp_name'])){ ????????????????if($_FILES['upimage']['size']>512000){ ????????????????????$errors[]="你上傳的文件過大,最大不能超過500K。"; ????????????????} ????????????????$file_tmp_name=$_FILES['upimage']['tmp_name']; ????????????????$fileext?=?array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png"); ????????????????if(!in_array($_FILES['upimage']['type'],$fileext)){ ????????????????????$errors[]="你上傳的文件格式不正確,僅支持?png,?jpg,?gif格式。"; ????????????????} ????????????} ????????????$tpgs=$_POST['tpgs'];//圖片格式 ????????????$bas_path=dirname?(?Yii::app?()->BasePath?); ????????????$qrcode_bas_path=$bas_path.'/upload/qrcode/'; ????????????if(!is_dir($qrcode_bas_path)){ ????????????????mkdir($qrcode_bas_path,?0777,?true); ????????????} ????????????$uniqid_rand=date("Ymdhis").uniqid().?rand(1,1000); ????????????$qrcode_path=$qrcode_bas_path.$uniqid_rand.?"_1.".$tpgs; ????????????$qrcode_path_new=$qrcode_bas_path.$uniqid_rand."_2.".$tpgs; ????????????if(Helper::getOS()=='Linux'){  ????????????????$mv?=?move_uploaded_file($file_tmp_name,?$qrcode_path); ????????????}else{ ????????????????//解決windows下中文文件名亂碼的問題 ????????????????$save_path?=?Helper::safeEncoding($qrcode_path,'GB2312'); ????????????????if(!$save_path){ ????????????????????$errors[]='上傳失敗,請重試!'; ????????????????} ????????????????$mv?=?move_uploaded_file($file_tmp_name,?$qrcode_path); ????????????} ????????????if(empty($errors)){ ????????????????$errorCorrectionLevel?=?$_POST['errorCorrectionLevel'];//容錯級別 ????????????????$matrixPointSize?=?$_POST['matrixPointSize'];//生成圖片大小 ????????????????$matrixMarginSize?=?$_POST['matrixMarginSize'];//邊距大小 ????????????????//生成二維碼圖片 ????????????????QRcode::png($content,$qrcode_path_new,?$errorCorrectionLevel,?$matrixPointSize,?$matrixMarginSize); ????????????????$QR?=?$qrcode_path_new;//已經(jīng)生成的原始二維碼圖 ????????????????$logo?=?$qrcode_path;//準備好的logo圖片 ????????????????if?(file_exists($logo))?{ ????????????????????$QR?=?imagecreatefromstring(file_get_contents($QR)); ????????????????????$logo?=?imagecreatefromstring(file_get_contents($logo)); ????????????????????$QR_width?=?imagesx($QR);//二維碼圖片寬度 ????????????????????$QR_height?=?imagesy($QR);//二維碼圖片高度 ????????????????????$logo_width?=?imagesx($logo);//logo圖片寬度 ????????????????????$logo_height?=?imagesy($logo);//logo圖片高度 ????????????????????$logo_qr_width?=?$QR_width?/?5; ????????????????????$scale?=?$logo_width/$logo_qr_width; ????????????????????$logo_qr_height?=?$logo_height/$scale; ????????????????????$from_width?=?($QR_width?-?$logo_qr_width)?/?2; ????????????????????//重新組合圖片并調(diào)整大小 ????????????????????imagecopyresampled($QR,?$logo,?$from_width,?$from_width,?0,?0,?$logo_qr_width, ????????????????????$logo_qr_height,?$logo_width,?$logo_height); ????????????????????//輸出圖片 //?????????????????????header("Content-type:?image/png"); ????????????????????imagepng($QR,$qrcode_path); ????????????????????imagedestroy($QR); ????????????????}else{ ????????????????????$qrcode_path=$qrcode_path_new; ????????????????} ????????????????$qrcode_path=str_replace($bas_path,'',?$qrcode_path); ????????????}else{ ????????????????$qrcode_path=''; ????????????} ????????} ????????$data=array('data'=>array('errors'=>$errors,'qrcode_path'=>$qrcode_path)); ????????$this->render?(?'qrcode',$data); ????}

免費視頻教程分享:php視頻教程

4、前臺的上傳界面

<?php $vars = get_defined_vars (); $data = $vars [&#39;data&#39;]; $content=Yii::app ()->request-&gt;hostInfo; $matrixPointSize=6; $matrixMarginSize=2; $errorCorrectionLevel='M'; $tpgs='gif'; if(!empty($_POST)){ ????$content=$_POST['content']; ????$matrixPointSize=$_POST['matrixPointSize']; ????$matrixMarginSize=$_POST['matrixMarginSize']; ????$errorCorrectionLevel=$_POST['errorCorrectionLevel']; ????$tpgs=$_POST['tpgs']; } $arrayCorrectionLevel=array('L'=&gt;'L?-?Low?(7%)','M'=&gt;'M?-?Medium?(15%)','Q'=&gt;'Q?-?Quartile?(25%)','H'=&gt;'H?-?High?(30%)'); $arrayTpgs=array('gif'=&gt;'gif格式','png'=&gt;'png格式','jpg格式'); ?&gt; <div> ????<div> ????????<div> ????????????<div> ????????????????<span></span>在線生成二維碼 ????????????</div> ????????????<div></div> ????????</div> <?php $form = $this->beginWidget?(?'CActiveForm',?array?( ????????'id'?=&gt;?'qrcode-form', ????????'htmlOptions'?=&gt;?array?( ????????????????'id'?=&gt;?'view_table', ????????????????'class'?=&gt;?'add-form?padding-10', ????????????????'enctype'?=&gt;?'multipart/form-data' ????????), ????????'enableAjaxValidation'?=&gt;?false )?); ?&gt; ????<div> ????????????<label>尺寸大小</label> ????????????<div> ????????????????<select> ????????????????????<?php  for ($i=1;$i<21;$i++):?> ????<option>"?<?php  echo $i==$matrixPointSize?&#39;selected&#39;:&#39;&#39;;?>&gt;<?php  echo $i;?> </option> ????????????????????<?php  endfor;?> ????????????????????</select> ????????????</div> ????????</div> ????????<div> ????????????<label>邊距大小</label> ????????????<div> ????????????????<select> ????????????????????<?php  for ($i=0;$i<21;$i++):?> ????<option>"?<?php  echo $i==$matrixMarginSize?&#39;selected&#39;:&#39;&#39;;?>&gt;<?php  echo $i;?> </option> ????????????????????<?php  endfor;?> ????????????????</select> ????????????</div> ????????</div> ????????<div> ????????????<label>容錯級別</label> ????????????<div> ????????????<?php  echo CHtml::dropDownList(&#39;errorCorrectionLevel&#39;,$errorCorrectionLevel, $arrayCorrectionLevel,array(&#39;class&#39;=>'form-control'));?&gt; ????????????</div> ????????</div> ????????<div> ????????????<label>保存格式</label> ????????????<div> ????????????<?php  echo CHtml::dropDownList(&#39;tpgs&#39;,$tpgs, $arrayTpgs,array(&#39;class&#39;=>'form-control'));?&gt; ????????????</div> ????????</div> ????????<div> ????????????<label>二維碼內(nèi)容</label> ????????????<div> ????????????????<?php  echo CHtml::textField(&#39;content&#39;,$content,array(&#39;class&#39;=>'form-control','maxlength'=&gt;150));?&gt; ????????????</div> ????????</div> ????????<div> ????????????<label>二維碼logo圖片</label> ????????????<div> ????????????????<div> ????????????????????????<input> ????????????????????????<input> ????????????????????</div> ????????????????<div><a>選擇文件</a></div> ????????????</div> ????????</div> ????????<div> ????????????<input> ????????</div> ????</div> <?php  $this->endWidget();??&gt; ????<div> ????????<div> ????????????<span></span>二維碼 ????????</div> ????????<div> ????????<?php  if(empty($_POST)):?> ????????<?php  echo CHtml::image(&#39;/static/tool/qrcode/qrcode.gif&#39;,&#39;二維碼&#39;);?> ????????<?php  endif;?> ????????<?php  if(!empty($data[&#39;errors&#39;])):?> ????????????<label>生成失敗</label> ????????????<div> ????????????<?php  foreach ($data[&#39;errors&#39;] as $e):?> ????????????<?php  echo $e;?><br> ????????????<?php  endforeach;?> ????????????</div> ????????<?php  endif;?> ????????<?php  if(!empty($data[&#39;qrcode_path&#39;])):?> ????????????<?php  echo CHtml::image($data[&#39;qrcode_path&#39;],&#39;二維碼&#39;);?> ????????????<a>"?target="_blank"&gt;<span></span>右鍵另存為二維碼</a> ????????<?php  endif;?> ????????</div> ????</div> <?php  $this->renderPartial('/component/duoshuo_common');?&gt; </div>

最終效果如下:

利用yii2生成二維碼的具體步驟

相關(guān)推薦:php視頻教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊14 分享