YII2.0框架生成二維碼

wd731869706發表於2022-01-12
  1. 安裝擴充套件

由於YII框架有composer,應付個小小的二維碼,不成問題。(如果還不知道composer,請自行查閱點選開啟連結),我們只要執行命令列

composer require 2amigos/yii2-qrcode-helper

或者在 composer.json 中新增 2amigos/yii2-qrcode-helper 再此之前建議您使用阿里雲composer映象。

阿里雲映象地址為developer.aliyun.com/composer按步驟安裝即可。安裝完成後進行下一步。
2.程式碼參考

<?php
namespace commonlib;

use DaQrCodeContractsErrorCorrectionLevelInterface;
use DaQrCodeExceptionInvalidPathException;
use DaQrCodeQrCode;
use Yii;

class QrCodeLib
{
    /**
     * 獲取二維碼
     * @param string $content
     * @param int $size
     * @return void
     */
    public static function getQrCode($content = '', $size = 300)
    {

        header('Content-Type: image/png');//解決輸出亂碼
        $qrCode = new QrCode($content);
        $qrCode->setSize($size);
        $code = $qrCode->writestring();
        exit($code);
    }

    /**
     * 獲取帶logo的二維碼
     * @param string $content
     * @param string $logoAddress 入口web下的檔案
     * @param int $size
     * @param int $margin
     * @param int $logoWidth
     * @return void
     */
    public static function getQrCodeWithLogo($content = '', $logoAddress = '', $size = 300, $margin = 5, $logoWidth = 65)
    {
        header('Content-Type: image/png');//防止亂碼
        try {
            $code = (new QrCode($content, ErrorCorrectionLevelInterface::HIGH))
                ->useLogo($logoAddress)
                ->useEncoding('UTF-8')
                ->setSize($size)
                ->setMargin($margin)
                ->setLogoWidth($logoWidth)
                ->writestring();
            exit($code);
        } catch (InvalidPathException $e) {
            print_r('生成二維碼失敗' . $e->getMessage());
        }
    }

    /**
     * 獲取二維碼base64
     * @param string $content
     * @param int $size
     * @return void
     */
    public static function getQrCodeBase64($content = '', $size = 300) {
        $qrCode = new QrCode($content);
        $qrCode->setSize($size);
        $code = $qrCode->writestring();
        //使用base64_encode變成編碼字串
        $imageString = base64_encode($code);
        return json_encode(['png'=>'data:image/png;base64,' . $imageString]);
        //如果直接輸出,用exit
        //        exit();
    }

    /**
     * 上傳到oss
     * @param string $content
     * @param int $size
     * @param string $path
     * @param string $type
     * @return bool|string
     */
    public static function getQrCodeUploadOss($content = '', $size = 300, $path = './', $type = 'png') {
        $qrCode = new QrCode($content);
        $qrCode->setSize($size);
        $code = $qrCode->writestring();
        //使用base64_encode變成編碼字串
        $imageString = base64_encode($code);
        if (!is_dir($path)) {
            //檢查是否有該資料夾,如果沒有就建立,並給予最高許可權
            mkdir($path, 0777,true);
        }
        $keyName = date('Ymd'). md5(uniqid(microtime(true),true)) . "_".rand(100,9999) . ".{$type}";
        $ossUrl = Yii::$app->params['environment'] . '/****/' . date('Ym') . '/' . date('md') . '/' . $keyName;
        $newFile = $path . $keyName;

        if (file_put_contents($newFile, base64_decode($imageString))){
            $objOss= new Aliyunoss();
            if($objOss::upFile($keyName, $ossUrl, $objOss::HASH_KEY_PIC )){
                unlink($newFile);
                return $objOss::readFile(Aliyunoss::HASH_KEY_PIC, $ossUrl, 36000);
            } else {
                unlink($newFile);
                return false;
            }
        }else{

        }
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章