laravel生成二维码,并添加背景图片,图标logo

1、安装组件

composer require simplesoftwareio/simple-qrcode 1.3.*

config/app.php 注册服务提供者:

SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class

同样在 config/app.php 添加 QrCode 门面:

'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class

2、用法

//生成二维码,并添加logo
public function generateQrCode($id, $dir)
{
    $host = request()->getSchemeAndHttpHost();
    $content = $host.'/red-envelop?id='.$id;
    //字符串是否有https
    if (strpos($host, 'http') === false) {
        $content = 'https://'.$content;
    }
    $fileName = $dir.$id.'.png';
    //1. errorCorrection 容错级别设置
    //      L   7% 的字节码恢复率.
    //      M   15% 的字节码恢复率.
    //      Q   25% 的字节码恢复率.
    //      H   30% 的字节码恢复率.
    //  2.margin    边距设置
    //  3.merge    二维码中添加图片,方法只支持 PNG,参数(图像路径或 URL,图像宽度和高度)
    //  4.backgroundColor(255, 0, 0)  设置二维码背景色
    //  5.color(255,0,255)   颜色
    //  6.size      字体设置
    //  7.generate  设置二维码参数:
    //      $QrCodeText  二维码内容
    //      $imagePath   二维码文件

    QrCode::format('png')->errorCorrection('Q')->margin(0.5)->merge($dir.'/logo/logo.png', 0.3, true)->size(400)->generate($content, $fileName);
    return $fileName;
}

//背景合成
public function qrcodeMerge($fileName, $text)
    {
        // 图片合成
        $bg = imagecreatefrompng($this->dir.'/logo/bg.png');// 提前准备好的海报图  必须是PNG格式
        $qrcodes = imagecreatefrompng($fileName); //二维码
        imagecopyresampled($bg, $qrcodes, 350, 350, 0, 0, imagesx($qrcodes), imagesx($qrcodes), imagesx($qrcodes), imagesx($qrcodes));
        // 设置文字样式
        $font = 'C:\Windows\Fonts\simsun.ttc'; // 替换为你的字体文件路径
        $fontSize = 18; // 字体大小
        $color = imagecolorallocate($bg, 251, 218, 165); // 文字颜色,这里设置为白色
        // 在背景图片上添加文字
        imagettftext($bg, $fontSize, 0, 710, 1060, $color, $font, $text);
        imagepng($bg, $fileName); //生成图片
        imagedestroy($bg);
        imagedestroy($qrcodes);
        $this->info('合成成功:'. $fileName);
        return $fileName;
    }

转换base64

我们有时候需要图片直接转为base64传给前端,需转为png格式

$img = \SimpleSoftwareIO\QrCode\Facades\QrCode::format('png')->size(150)->generate($id);
$img = 'data:image/png;base64,' . base64_encode($img);               

原文链接:https://blog.csdn.net/MrEahon/article/details/123895256