使用PHP生成二维码的两种方法(带logo图像)

一、利用Google API生成二维码
 Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码:

$urlToEncode="http://www.jb51.net";
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.'"/>';
}

二、使用PHP二维码生成类库PHP QR Code生成二维码
 
PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址:http://phpqrcode.sourceforge.net/
下载官网提供的类库后,只需要使用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);
}

调用PHP QR Code非常简单,如下代码即可生成一张内容为"http://www.jb51.net"的二维码.
Php代码 
include 'phpqrcode.php';  
QRcode::png('http://www.jb51.net');  
 
那么实际应用中,我们会在二维码的中间加上自己的LOGO,已增强宣传效果。那如何生成含有logo的二维码呢?其实原理很简单,先使用PHP QR Code生成一张二维码图片,然后再利用php的image相关函数,将事先准备好的logo图片加入到刚生成的原始二维码图片中间,然后重新生成一张新 的二维码图片。

include 'phpqrcode.php';
$value = 'http://www.jb51.net'; //二维码内容
$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 6;//生成图片大小
//生成二维码图片
QRcode::png($value, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2);
$logo = 'logo.png';//准备好的logo图片
$QR = 'qrcode.png';//已经生成的原始二维码图 

if ($logo !== FALSE) {
 $QR = imagecreatefromstring(file_get_contents($QR));
 $logo = imagecreatefromstring(file_get_contents($logo));
 $QR_width = imagesx($QR);//二维码图片宽度
 $QR_height = imagesy($QR);//二维码图片高度
 $logo_width = imagesx($logo);//logo图片宽度
 $logo_height = imagesy($logo);//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($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
 $logo_qr_height, $logo_width, $logo_height);
}
//输出图片
imagepng($QR, 'helloweba.png');
echo '<img src="helloweba.png">';

下面是参考上面的代码,不生产图片文件,方便调用的,将下面的代码保存为img.php

<?php
include 'phpqrcode.php';
$value = $_GET['url'];//二维码内容
$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 6;//生成图片大小
//生成二维码图片
QRcode::png($value, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2);
$logo = 'jb51.png';//准备好的logo图片
$QR = 'qrcode.png';//已经生成的原始二维码图 

if ($logo !== FALSE) {
 $QR = imagecreatefromstring(file_get_contents($QR));
 $logo = imagecreatefromstring(file_get_contents($logo));
 $QR_width = imagesx($QR);//二维码图片宽度
 $QR_height = imagesy($QR);//二维码图片高度
 $logo_width = imagesx($logo);//logo图片宽度
 $logo_height = imagesy($logo);//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($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
 $logo_qr_height, $logo_width, $logo_height);
}
//输出图片
Header("Content-type: image/png");
ImagePng($QR);

调用方法:

<img src=http://test.jb51.net:8080/qr/img.php?url=http://www.jb51.net/1.rar>

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

PS:本站还提供了一个功能十分强大的二维码工具供大家使用:

http://tools.jb51.net/transcoding/jb51qrcode

(0)

相关推荐

  • php生成二维码图片方法汇总

    第一种方法: 1,第一种方法:利用使用最广泛,最方便的Google api技术实现: 2 ,<?php //封装生成二维码图片的函数(方法) /* 利用google api生成二维码图片 $content:二维码内容参数 $size:生成二维码的尺寸,宽度和高度的值 $lev:可选参数,纠错等级 $margin:生成的二维码离边框的距离*/ function create_erweima($content, $size = '100', $lev = 'L', $margin= '0') { $

  • Yii2.0小部件GridView(两表联查/搜索/分页)功能的实现代码

     GridView 两表联查/搜索/分页 当我们在一个网格视图中显示活动数据的时候,你可能会遇到这种情况,就是显示关联表的列的值,为了使关联列能够排序,你需要连接关系表,以及添加排序规则到数据提供者的排序组件中,对数据进行搜索,排序. Ⅰ.控制器层Controller <?php namespace backend\controllers; header("Content-type:text/html;charset=utf-8"); use Yii; use yii\web\C

  • PHP下通过QRCode类库创建中间带网站LOGO的二维码

    我们要生成二维码都需要借助一些类库来实现了,下面我介绍利用PHP QR Code生成二维码吧,生成方法很简单,下面我来介绍一下. 利用php类库PHP QR Code来实现,不需要装额外的php扩展,首先下载类库包,有时候地址打不开,地址:http://phpqrcode.sourceforge.net/ 下载: 国内下载:http://www.jb51.net/codes/189897.html 国外下载:http://sourceforge.net/projects/phpqrcode/ 例

  • yii2.0数据库迁移教程【多个数据库同时同步数据】

    本文讲述了yii2.0数据库迁移的方法.分享给大家供大家参考,具体如下: 创建迁移 使用如下命令来创建一个新的迁移: yii migrate/create <name> 必填参数 name 的作用是对新的迁移做一个简要的描述.例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每个数据库都有news表 )   添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令: yii migrate/create addColumn_news 注意:因为 na

  • PHP微信开发之二维码生成类

    <?php /** * Created by PhpStorm. * User: bin * Date: 15-1-16 * Time: 上午9:48 */ namespace Home\Common; // 微信处理类 set_time_limit(30); class Weixin{ //构造方法 static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?"; static $token_url

  • Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例

    之前从没接触过Yii,借助的各方资源来做的这个整合阿里云OSS的SDK上传图片实例,如果有不正之处请指出! 前面参照了weinirumo 的介绍,大家可以自行去查看. 好了,下面开始进入主题: 准备工作:需要使用composer执行命令,如果没有安装composer的需要提前安装,参考文档:composer安装流程 1.项目目录结构 我使用的是基础版,只有后台目录,请自行对照自己的项目目录结构,会用到以下的几个目录: 2.在项目根目录下运行cmd命令 3.执行composer命令 切换到中国国内

  • php调用google接口生成二维码示例

    复制代码 代码如下: <?php $data = isset($_GET['t']) ? $_GET['t'] : 'http://www.XXX.com'; $size = isset($_GET['size']) ? $_GET['size'] : '150x150'; $logo = isset($_GET['logo']) ? $_GET['logo'] :"./image/logo.jpg"; $chl = urlencode($logo); $png = "

  • php生成二维码的几种方式整理及使用实例

    1.google开放api 复制代码 代码如下: $urlToEncode="http://bbs.lewanchina.com"; generateQRfromGoogle($urlToEncode); function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0') { $url = urlencode($url); echo '<img src="http://cha

  • Yii2.0实现生成二维码功能实例

    本文实例讲述了Yii2.0实现生成二维码功能.分享给大家供大家参考,具体如下: 通过composer安装: 1.下面的方法是通过composer加载 php composer.phar require "2amigos/yii2-qrcode-helper" "*" 或者添加 "2amigos/yii2-qrcode-helper" : "*" 到对应项目的composer.json文件中 通过归档文件安装: 不习惯用comp

  • PHP识别二维码的方法(php-zbarcode安装与使用)

    本文实例讲述了PHP识别二维码的方法.分享给大家供大家参考,具体如下: 说明:扩展需要依赖ImageMagick和zbar,安装前先安装这两个软件 1.安装ImageMagick(http://www.imagemagick.org/) yum install ImageMagick.x86_64 ImageMagick-devel.x86_64 2.安装zbar(http://sourceforge.net/projects/zbar/?source=directory) wget http:

随机推荐