首頁 php框架 YII 利用yii2產生二維碼的具體步驟

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

Mar 15, 2021 am 10:22 AM
yii2 QR 圖碼

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

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

1、在官網下載類別庫

在官網下載類別庫後,確保目前PHP環境支援GD2,然後我們只需要使用phpqrcode.php就可以產生二維碼了。

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

  • #參數$text表示產生二位的資訊文字;

  • 參數$outfile表示是否輸出二維碼圖片文件,預設否;

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

  • ##size#表示產生圖片大小,預設為3;參數$margin表示二維碼周圍邊框空白區域間距值;

  • #參數$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']); //二维码内容
            $contentSize=$this->getStringLength($content);
            if($contentSize>290){
                $errors[]='字数过长,不能多于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;//已经生成的原始二维码图
                $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;
                    //重新组合图片并调整大小
                    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->hostInfo;
$matrixPointSize=6;
$matrixMarginSize=2;
$errorCorrectionLevel=&#39;M&#39;;
$tpgs=&#39;gif&#39;;
if(!empty($_POST)){
    $content=$_POST[&#39;content&#39;];
    $matrixPointSize=$_POST[&#39;matrixPointSize&#39;];
    $matrixMarginSize=$_POST[&#39;matrixMarginSize&#39;];
    $errorCorrectionLevel=$_POST[&#39;errorCorrectionLevel&#39;];
    $tpgs=$_POST[&#39;tpgs&#39;];
}
$arrayCorrectionLevel=array(&#39;L&#39;=>&#39;L - Low (7%)&#39;,&#39;M&#39;=>&#39;M - Medium (15%)&#39;,&#39;Q&#39;=>&#39;Q - Quartile (25%)&#39;,&#39;H&#39;=>&#39;H - High (30%)&#39;);
$arrayTpgs=array(&#39;gif&#39;=>&#39;gif格式&#39;,&#39;png&#39;=>&#39;png格式&#39;,&#39;jpg格式&#39;);
?>
<div class="col-md-12">
    <div class="form-horizontal panel panel-default margin-t-10 b-img">
        <div class="panel-heading">
            <div class="pull-left">
                <span class="g-bg glyphicon glyphicon-wrench margin-r-2"
                    aria-hidden="true"></span>在线生成二维码
            </div>
            <div class="clearfix"></div>
        </div>
<?php
$form = $this->beginWidget ( &#39;CActiveForm&#39;, array (
        &#39;id&#39; => &#39;qrcode-form&#39;,
        &#39;htmlOptions&#39; => array (
                &#39;id&#39; => &#39;view_table&#39;,
                &#39;class&#39; => &#39;add-form padding-10&#39;,
                &#39;enctype&#39; => &#39;multipart/form-data&#39;
        ),
        &#39;enableAjaxValidation&#39; => false
) );
?>
    <div class="form-group">
            <label class="col-lg-2 control-label">尺寸大小</label>
            <div class="col-lg-3">
                <select class="form-control" id="matrixPointSize"
                    name="matrixPointSize">
                    <?php for ($i=1;$i<21;$i++):?>
    <option value="<?php echo $i;?>" <?php echo $i==$matrixPointSize?&#39;selected&#39;:&#39;&#39;;?>><?php echo $i;?></option>
                    <?php endfor;?>
                    </select>
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-2 control-label">边距大小</label>
            <div class="col-lg-3">
                <select class="form-control" id="matrixMarginSize"
                    name="matrixMarginSize">
                    <?php for ($i=0;$i<21;$i++):?>
    <option value="<?php echo $i;?>" <?php echo $i==$matrixMarginSize?&#39;selected&#39;:&#39;&#39;;?>><?php echo $i;?></option>
                    <?php endfor;?>
                </select>
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-2 control-label">容错级别</label>
            <div class="col-lg-3">
            <?php echo CHtml::dropDownList(&#39;errorCorrectionLevel&#39;,$errorCorrectionLevel, $arrayCorrectionLevel,array(&#39;class&#39;=>&#39;form-control&#39;));?>
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-2 control-label">保存格式</label>
            <div class="col-lg-3">
            <?php echo CHtml::dropDownList(&#39;tpgs&#39;,$tpgs, $arrayTpgs,array(&#39;class&#39;=>&#39;form-control&#39;));?>
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-2 control-label">二维码内容</label>
            <div class="col-lg-5">
                <?php echo CHtml::textField(&#39;content&#39;,$content,array(&#39;class&#39;=>&#39;form-control&#39;,&#39;maxlength&#39;=>150));?>
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-2 control-label">二维码logo图片</label>
            <div class="col-lg-5">
                <div class="col-md-6">
                        <input id="upimage" type="file" name="upimage" class="hidden">
                        <input id="tmp_file" class="form-control" type="text" value="gif,png,jpg">
                    </div>
                <div class="col-md-6"><a class="btn btn-default" onclick="$(&#39;input[id=upimage]&#39;).click();">选择文件</a></div>
            </div>
        </div>
        <div class="list_back">
            <input type="submit" value="生成二维码" class="btn btn-success">
        </div>
    </div>
<?php $this->endWidget(); ?>
    <div class="panel panel-default margin-t-10 b-img">
        <div class="panel-heading">
            <span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>二维码
        </div>
        <div class="panel-body">
        <?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 class="col-lg-2 text-right">生成失败</label>
            <div class="col-lg-5">
            <?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 class="btn btn-success color-f" href="<?php echo $data[&#39;qrcode_path&#39;];?>" target="_blank"><span aria-hidden="true" class="glyphicon glyphicon-download-alt margin-r-2"></span>右键另存为二维码</a>
        <?php endif;?>
        </div>
    </div>
<?php $this->renderPartial(&#39;/component/duoshuo_common&#39;);?>
</div>
登入後複製

最終效果如下:


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

相關推薦:

yii框架

以上是利用yii2產生二維碼的具體步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

wps製作一個二維碼的操作方法 wps製作一個二維碼的操作方法 Mar 28, 2024 am 09:41 AM

1.開啟軟體,進入wps文字操作介面。 2、在該介面內找到插入選項。 3.點選插入選項,在其編輯工具區找到二維碼選項。 4.點選二維碼選項,彈出二維碼對話框。 5.在左側選擇文字選項,在文字方塊裡就能輸入我們的資訊了。 6.在右側可以設定二維碼的形狀和二維碼的顏色。

如何使用 PHP 實作動態生成二維碼功能 如何使用 PHP 實作動態生成二維碼功能 Sep 05, 2023 pm 05:45 PM

如何使用PHP實現動態生成二維碼功能二維碼(QRCode)被廣泛應用於各個領域,它可以儲存大量資訊且易於掃描。在網頁應用程式中,我們經常需要動態產生二維碼,以便提供使用者方便的操作方式。本文將介紹如何使用PHP實作動態產生二維碼的功能。一、安裝和設定PHPQRCode程式庫為了方便產生二維碼,我們可以使用PHPQRCode函式庫。首先,我們需要

如何在 iPhone 上掃描二維碼 如何在 iPhone 上掃描二維碼 May 04, 2023 am 11:46 AM

先決條件:在您的iPhone上啟用二維碼掃描預設情況下,所有運行iOS11的iPhone都啟用了掃描QR碼的功能。因此,您需要確保您的iPhone已更新到最新的可用版本,至少iOS11才能能夠原生掃描QR碼。在繼續執行以下任何方法之前,您必須確保在iPhone上啟用了該功能。您可以透過開啟「設定」應用程式並點選「相機」部分在iPhone上啟用QR碼掃描。在下一個畫面上,啟用「掃描QR碼」切換。這應該會打開該功能,以便您可以使用以下任何方法掃描並從QR碼中提取

如何使用PHP產生批次的二維碼? 如何使用PHP產生批次的二維碼? Aug 25, 2023 pm 04:33 PM

如何使用PHP產生批次的二維碼?隨著網路科技的不斷發展,二維碼已經成為了非常普遍的訊息傳遞工具。二維碼可以儲存大量的信息,並且可以快速掃描識別,因此在各行各業中得到了廣泛的應用。在很多情況下,我們需要大量產生大量的二維碼,例如用於商品標籤、活動門票等。 PHP是一種廣泛應用於web開發的腳本語言,具有靈活、簡單易用的特性。下面,我們將介紹如何使用PHP生

如何使用PHP產生帶有時間限制的二維碼? 如何使用PHP產生帶有時間限制的二維碼? Aug 26, 2023 pm 04:34 PM

如何使用PHP產生帶有時間限制的二維碼?隨著行動支付和電子門票的普及,二維碼成為了一種常見的技術。在許多場景中,我們可能需要產生一種帶有時間限制的二維碼,即使在一定時間後,該二維碼也會失效。本文將介紹如何使用PHP產生具有時間限制的二維碼,並提供程式碼範例供參考。安裝PHPQRCode函式庫要使用PHP產生二維碼,我們需要先安裝PHPQRCode函式庫。這個庫

企業微信二維碼載入不出來怎麼辦? 企業微信二維碼載入不出來怎麼辦? Mar 14, 2024 pm 10:46 PM

  企業微信二維碼載入不出來怎麼辦?當我們在登入企業微信電腦版的時候發現二維碼載入不出來無法顯示的時候該怎麼解決,這裡小編就給大家詳細介紹一下企業微信二維碼加載不出來的解決方法,有需要的小夥伴快來看看!  方法一、網路原因  1、可能是網速緩慢,導致載入緩慢從而無法顯示,可以斷開之後重新連接。  2、檢查電腦本身的網絡問題,看看是否連接上了網絡,可以重新啟動一下網絡設備。  方法二、維護更新  可能由於企業微信版本過低,導致無法產生二維碼,可以將軟體更新升級成最新版本。  方法三、防火牆  1

如何使用Vue實現二維碼生成 如何使用Vue實現二維碼生成 Nov 07, 2023 am 09:57 AM

二維碼是現代社會中廣泛使用的一種資訊編碼方式,Vue是一款前端框架,如何使用Vue實現二維碼生成?一、了解二維碼產生的原理二維碼的生成原理是將一段文字或一段URL位址轉換成一張圖片,在這張圖片中編碼了文字或URL位址的資訊。二維碼產生可以使用第三方函式庫,本文介紹如何使用Qrcode.js函式庫來產生二維碼。 Qrcode.js是一款輕量、無依賴的二維碼產生函式庫。二

yii2 怎麼去掉jquery yii2 怎麼去掉jquery Feb 17, 2023 am 09:55 AM

yii2去掉jquery的方法:1、編輯AppAsset.php文件,註解掉變數$depends裡的「yii\web\YiiAsset」值;2、編輯main.php文件,在欄位「components」下方新增配置為「'yii \web\JqueryAsset' => ['js' => [],'sourcePath' => null,],」即可去掉jquery腳本。

See all articles