Laravel 实现生成推广海报

简介:Simple QrCode 是基于强大的库开发的适用于当前最流行的Laravel框架的一个扩展库.便于Laravel用户可以很方便地使用.
中文教程官网:https://www.simplesoftware.io/simple-qrcode/zh/

一、配置

1.在项目根目录输入命令
composer require simplesoftwareio/simple-qrcode 2.*

2.在config/app.php 的 providers 数组里添加服务提供者.
SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class

3.在app/config/app.php 的 aliases 数组里添加别名.
'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class

4.配置工作就做完了,下面就开始引入使用了

二、应用实例

1.命名空间引入
use SimpleSoftwareIO\QrCode\Facades\QrCode;

2.生成普通二维码(扫描之后内容为填写的字符转)
QrCode::generate('Hello World!');

3.生成中文字符的二维码(扫描之后内容为填写的字符转)
QrCode::encoding('UTF-8')->generate('你好世界');

4.将生成的指定的图片格式二维码保存到指定路径
QrCode::encoding('UTF-8')->format('png')->generate('我是内容',public_path('image/test.png'));

5.修改二维码图片的大小
QrCode::format('png')->size(100)->encoding('UTF-8')->generate('我是内容',public_path('img/qrcode.png'));

6.改变 二维码颜色
QrCode::format('png')->size(100)->color(255,0,255)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

7.改变 二维码 颜色与背景颜色(形成反差)
QrCode::format('png')->size(100)->color(255,0,255)->backgroundColor(255,255,0)->margin(100)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

8.改变 二维码距边框的距离
QrCode::format('png')->size(100)->color(255,0,255)->backgroundColor(255,255,0)->margin(100)->generate('Hello,Laravel!',public_path('qrcodes/qrcode.png'));

9.合并水印到二维码 参数1为图片地址 参数2为 所占百分比 如 .15
QrCode::format('png')->size(200)->merge('参数1',参数2)->generate('LaravelAcademy',public_path('qrcodes/qrcode.png'));

三、其他设置

1.边距设置
也支持设置边距. 设置方式如下:
QrCode::margin(100);

2.容错级别设置
改变二维码的容错级别也很方便. 只要这么设置:
QrCode::errorCorrection('H');

容错级别 说明
L 7% 的字节码恢复率.
M 15% 的字节码恢复率.
Q 25% 的字节码恢复率.
H 30% 的字节码恢复率.
容错级别越高,二维码里能存储的数据越少.

四、简单案例代码

        $user_id = 5;
        $string = User::where('id',$user_id)->first('invitation_code')['invitation_code'];

        //  生成初始二维码,并保存到public\qrcode\目录下 文件名 1_888888.png
        QrCode::format('png')->size(100)->margin(0)->encoding('UTF-8')->generate($string,public_path('qrcode/'.$user_id.'_'.$string.'.png'));

        // 给二维码中间添加logo
        // $path = public_path().'';
        // QrCode::format('png')->size(100)->margin(0)->merge('\public\qrcode\logo.png',.15)->encoding('UTF-8')->generate($invitation_code,public_path('qrcode/qrcode.png'));

        // 图片合成 添加海报背景
        $public_path = public_path('qrcode/');
        $bg = imagecreatefrompng(public_path('qrcode/bg.png'));// 读背景海报 提前准备好的
        $inviterQrCodeFileName = $user_id.'_'.$string.'.png'; // 1_888888.png
        $qrcode = imagecreatefrompng($public_path.$inviterQrCodeFileName); // 读取二维码资源
        //参数:背景海报资源、初始二维码、左边距、上边距 0 0 二维码宽、二维码高
        imagecopyresampled($bg, $qrcode, 130, 362, 0, 0, 115, 115, imagesx($qrcode), imagesy($qrcode));
        imagepng($bg, public_path('qrcode/' . $inviterQrCodeFileName));// 保存图片

        $dst = imagecreatefromstring(file_get_contents(public_path('qrcode/'.$user_id.'_'.$string.'.png')));
        //打上文字
        $fontColor = imagecolorallocate($dst, 255, 255, 255);//字体颜色
        // 设置文字位置:源资源、字体大小、角度、左边距、上边距、字体颜色、字体资源、文案
        imagettftext($dst,16,0,180,512,$fontColor,public_path('fonts/simkai.ttf'),$string);
        // 输出到浏览器
        //header('Content-Type: image/png');
        //imagepng($dst);

        // 保存图片本地
        imagepng($dst, public_path('qrcode/' . $inviterQrCodeFileName));

        // 返回给客户端
        $data = [
            'qrcode'=>$_SERVER["HTTP_HOST"].'/qrcode/'.$inviterQrCodeFileName
        ];
        return $this->writeJson(0,$data);

五、效果图

Last modification:November 30th, 2019 at 11:16 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment