使用PHP生成带LOGO的二维码

code1.jpg

HP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码。下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2。

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表示是否保存二维码并显示。

代码如下:

public static function png($text, $outfile=false, $level=QR_ECLEVEL_L, $size=3, $margin=4, $saveandprint=false)    
{   
    $enc = QRencode::factory($level, $size, $margin);   
    return $enc->encodePNG($text, $outfile, $saveandprint=false); 
}  

一、生成不带LOGO的二维码图片

调用PHP QR Code非常简单,如下代码即可生成一张内容为"http://www.kfazcenter.com/"的二维码。

代码如下:

public function qrcode($url='http://www.kfazcenter.com/',$level=3,$size=4){
    Vendor('phpqrcode.phpqrcode');
    $errorCorrectionLevel =intval($level) ;//容错级别 
    $matrixPointSize = intval($size);//生成图片大小 
    //生成二维码图片 
    //echo $_SERVER['REQUEST_URI'];
    $object = new \QRcode();
    $object->png($url, false, $errorCorrectionLevel, $matrixPointSize, 2); 
}

到这里已经可以生成二维码了;如果想对二维码更加个性化定制的话下面具体说一下png() 函数的使用。

png(
    $text, $outfile = false, 
    $level = QR_ECLEVEL_L, 
    $size = 3, 
    $margin = 4, 
    $saveandprint=false, 
    $back_color = 0xFFFFFF, 
    $fore_color = 0x000000
   );  

① 第一个参数$text:就是上面代码里的URL网址参数;
② 第二个参数$outfile:默认为否;不生成文件;只将二维码图片返回;否则需要给出存放生成二维码图片的路径;
③ 第三个参数$level:默认为L;这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%);这个参数控制二维码容错率;不同的参数表示二维码可被覆盖的区域百分比。利用二维维码的容错率;我们可以将头像放置在生成的二维码图片任何区域;
④ 第四个参数$size:控制生成图片的大小;默认为4;
⑤ 第五个参数$margin:控制生成二维码的空白区域大小;
⑥ 第六个参数$saveandprint:保存二维码图片并显示出来;$outfile必须传递图片路径;
⑦ 第七个参数$back_color:背景颜色;
⑧ 第八个参数$fore_color:绘制二维码的颜色;
注:第七、第八个参数需要传16进制是色值;并且要把“#”替换为“0x”
例如:
白色:#FFFFFF => 0xFFFFFF
黑色:#000000 => 0x000000

二、生成带LOGO的二维码图片

那么实际应用中,我们会在二维码的中间加上自己的LOGO,已增强宣传效果。那如何生成含有logo的二维码呢?其实原理很简单,先使用PHP QR Code生成一张二维码图片,然后再利用php的image相关函数,将事先准备好的logo图片加入到刚生成的原始二维码图片中间,然后重新生成一张新的二维码图片。

代码如下:

  /**      
    * 生成带logo的二维码图片      
    */  
    public function qrcodeWithPicture()  
    {  
        Vendor('phpqrcode.phpqrcode');  
        $object = new \QRcode();  
        //二维码内容  
        $url = 'http://www.kfazcenter.com';  
        //容错级别  
        $errorCorrectionLevel = 'L';  
        //生成图片大小  
        $matrixPointSize = 6;  
        //生成一个二维码图片  
        $object->png($url, 'zhihua_w.png', $errorCorrectionLevel, $matrixPointSize, 2);  
  
        //准备好的logo图片,本人放在了根目录下  
        $logo = "a1.jpg";  
        //已经生成的原始二维码图,也在根目录下  
        $qrcode = 'zhihua_w.png';  
        //logo图片存在  
        if ($logo !== FALSE) {  
            $qrcode = imagecreatefromstring(file_get_contents($qrcode));  
            $logo = imagecreatefromstring(file_get_contents($logo));  
            $qrcode_width = imagesx($qrcode);   //二维码图片宽度  
            $qrcode_height = imagesy($qrcode);  //二维码图片高度  
            $logo_width = imagesx($logo);       //logo图片宽度  
            $logo_height = imagesy($logo);      //logo图片高度  
            $logo_qr_width = $qrcode_width / 5;  
            $scale = $logo_width / $logo_qr_width;  
            $logo_qr_height = $logo_height / $scale;  
            $from_width = ($qrcode_width - $logo_qr_width) / 2;  
            //重新组合图片并调整大小  
            imagecopyresampled($qrcode, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,  
            $logo_qr_height, $logo_width, $logo_height);  
        }  
        //输出图片  
        imagepng($qrcode, 'zhihua_w_logo.png');  
        echo '<img src="http://www.kfazcenter.com/zhihua_w_logo.png">';  
    } 

三、利用Google API生成二维码

    $urlToEncode="http://www.kfazcenter.com/"; 
    generateQRfromGoogle($urlToEncode); 
    /**      
     * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】      
     * @param string $chl 二维码包含的信息,可以是数字、字符、二进制信息、汉字。 不能混合数据类型,数据必须经过UTF-8 URL-encoded      
     * @param int $widhtHeight 生成二维码的尺寸设置      
     * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。     
     * L-默认:可以识别已损失的7%的数据     
     * M-可以识别已损失15%的数据      
     * Q-可以识别已损失25%的数据      
     * H-可以识别已损失30%的数据      
     * @param int $margin 生成的二维码离图片边框的距离      
     */
     
    function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0') { 
   
        $chl = urlencode($chl); 
        echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.' " widhtHeight="'.$widhtHeight.'"/>'; 
        
    }  

补充说明:

由于二维码允许有一定的容错性,一般的二维码即使在遮住部分但仍然能够解码,经常我们扫描二维码的时候扫描到甚至不到一半时就能解码扫描结果,这是因为生成器会将部分信息重复表示来提高其容错度,这就是为什么我们在二维码中间加个LOGO图片并不影响解码结果的原因。

如果你有更好的心得和建议,欢迎拍砖一起探讨。
欢迎加入【编程技术微分享】,加入(596888158)请留言,或联系QQ:Mr.Chen(1182929304)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335