前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >修改phpqrcode源码满足添加中间logo图标功能

修改phpqrcode源码满足添加中间logo图标功能

作者头像
躺平程序员老修
发布2023-09-05 16:05:44
2000
发布2023-09-05 16:05:44
举报
文章被收录于专栏:躺平程序员老修

qrcode

问题起源

最近尝试了一下用phpqrcode生成二维码的功能,发现没有添加中间logo的功能,于是自己改了源码写了一个功能。百度能搜到的都是在phpqrcode生成文件的基础上二次添加的,这样对于强迫症来说是有一点性能损耗的,因为每次都伴随着文件的生成和读取,于是自己添加了一个直接在原基础上生成带logo的二维码。可选是否生成文件。

使用方法

类库下载地址 :https://github.com/ShyZhen/phpqrcode

代码语言:javascript
复制
    require_once '../phpqrcode.php';
    $text = 'https://www.litblc.com';
    $level = 1;
    $size = 10;
    $margin = 1;
    $logo = './logo.png';
    $saveName = false;
    /**
     * 生成中间带有logo的二维码
     * @Author huaixiu.zhen
     * http://litblc.com
     * @param string $text     要生成的url
     * @param int $level       容错率 推荐使用 >= 1 的值
     * @param int $size        控制生成图片的大小
     * @param int $margin      控制生成二维码的空白区域大小
     * @param string $logo     中间要加的logo的物理地址
     * @param string $saveName 是否保存,可以输入路径和文件名
     */
    QRcode::addLogo($text, $level, $size, $margin, $logo, $saveName);

源码解读

代码语言:javascript
复制
    /**
     * 生成中间带有logo的二维码
     * @Author huaixiu.zhen
     * http://litblc.com
     * @param string $text 要生成的url
     * @param int $level 容错率 推荐使用 >= 1 的值
     * @param int $size 控制生成图片的大小
     * @param int $margin 控制生成二维码的空白区域大小
     * @param string $logo 中间要加的logo物理地址
     * @param string $saveName 是否保存,可以输入路径和文件名
     */
    public static function addLogo($text, $level, $size, $margin, $logo, $saveName = '')
    {
        // Copyright 2018 litblc, shyZhen
        // May be used under the terms of the GNU Lesser General Public License (LGPL)
        $img = self::png($text, 'resource', $level, $size, $margin, false);
        if (file_exists($logo)) {
            $logo = imagecreatefromstring (file_get_contents($logo));
        } else {
            die('logo file not exists');
        }
        // 真彩色图像转换为调色板图像,防止颜色失真
        if (imageistruecolor($logo)) {
            imagetruecolortopalette($logo, false, 65535);
        }
        $QR_width = imagesx($img);
        $logo_width = imagesx($logo);
        $logo_height = imagesy($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($img, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
        header("content-type: image/png");
        if ($saveName) {
            ImagePng($img, $saveName);
            ImagePng($img);
        } else {
            imagepng ($img);
        }
    }

主要是修改源码使之返回图像资源,在图像资源上进行操作。其他部分修改不在这里展示了,缺点是只对生成png格式的二维码方法进行了修改,满足了我大部分的要求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题起源
  • 使用方法
  • 源码解读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档