欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

PHP基于phpqrcode类生成二维码的方法详解 有大用

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:

使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。

前期准备:

1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

方法解读:

下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):

1
2
3
4
5
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);
}

第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
第4个参数$size:控制生成图片的大小,默认为4;
第5个参数$margin:控制生成二维码的空白区域大小;
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;

使用示例:

1. 生成二维码(生成图片文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 1. 生成原始的二维码(生成图片文件)
function scerweima($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = QR_ECLEVEL_L//容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $QR = $filename;        //已经生成的原始二维码图片文件
  $QR = imagecreatefromstring(file_get_contents($QR));
  //输出图片
  imagepng($QR, 'qrcode.png');
  imagedestroy($QR);
  return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima('https://www.baidu.com');

2. 在生成的二维码中加上logo(生成图片文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//2. 在生成的二维码中加上logo(生成图片文件)
function scerweima1($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = QR_ECLEVEL_H//容错级别
  $matrixPointSize = 6;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $logo = 'qrcode/logo.jpg'; //准备好的logo图片
  $QR = $filename;      //已经生成的原始二维码图
  if (file_exists($logo)) {
    $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 / 4;   //组合之后logo的宽度(占二维码的1/5)
    $scale = $logo_width/$logo_qr_width//logo的宽度缩放比(本身宽度/组合后的宽度)
    $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    //重新组合图片并调整大小
    /*
     * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
     */
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
  }
  //输出图片
  imagepng($QR, 'qrcode.png');
  imagedestroy($QR);
  imagedestroy($logo);
  return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima1('https://www.baidu.com');

3. 生成二维码(不生成图片文件)

1
2
3
4
5
6
7
8
9
10
11
//3. 生成原始的二维码(不生成图片文件)
function scerweima2($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = QR_ECLEVEL_L//容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
}
//调用查看结果
scerweima2('https://www.baidu.com');

前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。

PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:

在线生成二维码工具(加强版)
http://tools.jb51.net/transcoding/jb51qrcode

在线二维码解码识别工具
http://tools.jb51.net/transcoding/trans_qrcode

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

来自 https://www.jb51.net/article/136418.htm


PHP生成二维码和识别二维码

 版权声明:本文为博主原创文章,拒绝相同的垃圾博文。 https://blog.csdn.net/tsummerb/article/details/79080057

<1>PHP生成二维码

QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,下载官网提供的类库后,只需要引入phpqrcode.php就可以生成二维码

代码实例如下:

  1. function setCode($url){
  2. $data = $url;
  3. $filename = '/var/www/pics/images/qrcode/'.time().'.png';  //  生成的文件名  
  4. $errorCorrectionLevel = QR_ECLEVEL_L;  // 纠错级别:L、M、Q、H  
  5. $matrixPointSize = 4; // 点的大小:1到10  
  6. QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
  7. }

<2>PHP识别二维码和条形码

支持格式:jpg、jpeg、png、gif

使用的拓展:php-zbarcode

拓展地址:https://github.com/mkoppanen/php-zbarcode

在线测试工具:http://demo.geekso.com/qrcode/current/tools

安装php-zbarcode之前需要先安装ImageMagick、zbar,具体的安装步骤见下链接

http://blog.mylogged.com/php%E8%AF%86%E5%88%AB%E4%BA%8C%E7%BB%B4%E7%A0%81%E5%8A%9F%E8%83%BDphp-zbarc...

代码实例:

  1. <?php
  2. $image = new ZBarCodeImage("test2.jpg");
  3. $scanner = new ZBarCodeScanner();
  4. $barcode = $scanner->scan($image);
  5. if (!empty($barcode)) {
  6. foreach ($barcode as $code) {
  7. printf("Found type %s barcode with data %s\n", $code['type'], $code['data']);
  8. }
  9. }
  10. ?>

php生成二维码图片


 

1.为什么要写这篇文章

最近做项目要生成二维码让用户做跳转,搜索了一下发现网上都是用一个叫做 phpqrcode 的扩展,在 github 上搜索了一下发现这个项目作者在6年前就已经没有维护了,百度的文章也是千篇一律的你复制我的我复制你的,所以只好在 github 上看看有没有更好的关于 PHP 生成二维码的扩展,之后找到了一个项目名称为 qr-code 的扩展,感觉不错,作者也一直在做维护,使用也是简单方便。所以在这里把这个扩展的安装使用说明一下,方便各位的开发。

qr-code 项目的github 地址为:qr-code

2.安装 qr-code

这里我们通过composer 来安装扩展,composer 也算是现在比较火的包管理工具了,如果对composer 不太了解的话,可以看下我以前的文章:

《php-composer的安装与使用方法》

我的环境为 linux,我们键入以下命令来进行该扩展的安装:

composer require endroid/qr-code

当扩展安装完毕后,我们就可以开始下面的操作了。

3.生成二维码

首先我们需要在项目中引入qr-code 类文件,composer 现在基本上是通过psr-4 "命名空间": "路径" 的方式进行自动加载,它的位置位于扩展根目录的 composer.json 文件中。

好了,现在我们引入qr-code 类文件,并尝试输出一个简单的二维码。

  1. use Endroid\QrCode\QrCode;
  2. // $content 一般为url地址 当然也可以是文字内容
  3. $content = 'http://www.baidu.com?rand=' . rand(1000, 9999);
  4. $qrCode = new QrCode($content);
  5. // 指定内容类型
  6. header('Content-Type: '.$qrCode->getContentType());
  7. // 输出二维码
  8. echo $qrCode->writeString();

好了,当指定了内容类型后,会直接在页面输出二维码

那这种直接输出的二维码怎么应用于项目中呢,一般都是直接写在html 中的 <img> 标签中,例如:

<img src="http://localhost:8080/projecttest/qrtest?id=1234"  alt="这是一个二维码" />

这样,就可以把二维码显示在页面的任意位置了。当然,我们也可以把它存入文件中,生成一个任意格式的图片,比如说:

$qrCode->writeFile(__DIR__ . '/qrcode.png');

这样我们就可以根据图片路径在页面上展示二维码了

4.简单的示例文件以及常用参数介绍

这里,我贴出一个简单的类处理文件,并介绍一下qr-code 常用的一些参数。

类文件:

  1. namespace '命名空间';
  2. use Endroid\QrCode\ErrorCorrectionLevel;
  3. use Endroid\QrCode\LabelAlignment;
  4. use Endroid\QrCode\QrCode;
  5. class QrcodeComponent
  6. {
  7. protected $_qr;
  8. protected $_encoding = 'UTF-8';
  9. protected $_size = 300;
  10. protected $_logo = false;
  11. protected $_logo_url = '';
  12. protected $_logo_size = 80;
  13. protected $_title = false;
  14. protected $_title_content = '';
  15. protected $_generate = 'display'; // display-直接显示 writefile-写入文件
  16. const MARGIN = 10;
  17. const WRITE_NAME = 'png';
  18. const FOREGROUND_COLOR = ['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0];
  19. const BACKGROUND_COLOR = ['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0];
  20. public function __construct($config) {
  21. isset($config['generate']) && $this->_generate = $config['generate'];
  22. isset($config['encoding']) && $this->_encoding = $config['encoding'];
  23. isset($config['size']) && $this->_size = $config['size'];
  24. isset($config['display']) && $this->_size = $config['size'];
  25. isset($config['logo']) && $this->_logo = $config['logo'];
  26. isset($config['logo_url']) && $this->_logo_url = $config['logo_url'];
  27. isset($config['logo_size']) && $this->_logo_size = $config['logo_size'];
  28. isset($config['title']) && $this->_title = $config['title'];
  29. isset($config['title_content']) && $this->_title_content = $config['title_content'];
  30. }
  31. /**
  32.     * 生成二维码
  33.     * @param $content 需要写入的内容
  34.     * @return array | page input
  35.     */
  36. public function create($content) {
  37. $this->_qr = new QrCode($content);
  38. $this->_qr->setSize($this->_size);
  39. $this->_qr->setWriterByName(self::WRITE_NAME);
  40. $this->_qr->setMargin(self::MARGIN);
  41. $this->_qr->setEncoding($this->_encoding);
  42. $this->_qr->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH);
  43. $this->_qr->setForegroundColor(self::FOREGROUND_COLOR);
  44. $this->_qr->setBackgroundColor(self::BACKGROUND_COLOR);
  45. if ($this->_title) {
  46. $this->_qr->setLabel($this->_title_content, 16, '字体地址', LabelAlignment::CENTER);
  47. }
  48. if ($this->_logo) {
  49. $this->_qr->setLogoPath($this->_logo_url);
  50. $this->_qr->setLogoWidth($this->_logo_size);
  51. $this->_qr->setRoundBlockSize(true);
  52. }
  53. $this->_qr->setValidateResult(false);
  54. if ($this->_generate == 'display') {
  55. // 前端调用 例:<img src="http://localhost/qr.php?url=base64_url_string">
  56. header('Content-Type: ' . $this->_qr->getContentType());
  57. return $this->_qr->writeString();
  58. } else if ($this->_generate == 'writefile') {
  59. return $this->_qr->writeString();
  60. } else {
  61. return ['success' => false, 'message' => 'the generate type not found', 'data' => ''];
  62. }
  63. }
  64. /**
  65.     * 生成文件
  66.     * @param $file_name 目录文件 例: /tmp
  67.     * @return array
  68.     */
  69. public function generateImg($file_name) {
  70. $file_path = $file_name . DS . uniqid() . '.' . self::WRITE_NAME;
  71. if (!file_exists($file_name)) {
  72. mkdir($file_name, 0777, true);
  73. }
  74. try {
  75. $this->_qr->writeFile($file_path);
  76. $data = [
  77. 'url' => $file_path,
  78. 'ext' => self::WRITE_NAME,
  79. ];
  80. return ['success' => true, 'message' => 'write qrimg success', 'data' => $data];
  81. } catch (Exception $e) {
  82. return ['success' => false, 'message' => $e->getMessage(), 'data' => ''];
  83. }
  84. }
  85. }

使用方法:

  1. use '命名空间';
  2. $qr_url = 'http://www.baidu.com?id=' . rand(1000, 9999);
  3. $file_name = '/tmp';
  4. // 直接输出
  5. $qr_code = new QrcodeComponent();
  6. $qr_img = qr_code->create($qr_url);
  7. echo $qr_img;
  8. // 生成文件
  9. $config = [
  10. 'generate' => 'writefile',
  11. ];
  12. $qr_code = new QrcodeComponent($config);
  13. $qr_img = $qr_code->create($qr_url);
  14. $rs = $qr_code->generateImg($file_name);
  15. print_r($rs);

常用参数解释:

setSize - 二维码大小 px
setWriterByName - 写入文件的后缀名
setMargin - 二维码内容相对于整张图片的外边距
setEncoding - 编码类型
setErrorCorrectionLevel - 容错等级,分为L、M、Q、H四级
setForegroundColor - 前景色
setBackgroundColor - 背景色
setLabel - 二维码标签
setLogoPath - 二维码logo路径
setLogoWidth - 二维码logo大小 px

转自:https://juejin.im/entry/5a7bc1976fb9a0634a390122


来自 https://blog.csdn.net/weixin_41111189/article/details/81236154



使用phpqrcode生成二维码

使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。

前期准备:
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

方法解读:
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):

[php] view plain copy 
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)   

  2. {  

  3.     $enc = QRencode::factory($level, $size, $margin);  

  4.     return $enc->encodePNG($text, $outfile, $saveandprint=false);  

  5. }  

第1个参数textjson2outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
第3个参数levelLL(QRECLEVELL7size:控制生成图片的大小,默认为4;
第5个参数margin6saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;

使用示例:

1. 生成二维码(生成图片文件)

 

[php] view plain copy 
  1. // 1. 生成原始的二维码(生成图片文件)  

  2. function scerweima($url=''){  

  3.     require_once 'phpqrcode.php';  

  4.       

  5.     $value = $url;                  //二维码内容  

  6.       

  7.     $errorCorrectionLevel = QR_ECLEVEL_L;    //容错级别   

  8.     $matrixPointSize = 5;           //生成图片大小    

  9.       

  10.     //生成二维码图片  

  11.     $filename = 'qrcode/'.microtime().'.png';  

  12.     QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);    

  13.     

  14.     $QR = $filename;                //已经生成的原始二维码图片文件    

  15.   

  16.   

  17.     $QR = imagecreatefromstring(file_get_contents($QR));    

  18.     

  19.     //输出图片    

  20.     imagepng($QR, 'qrcode.png');    

  21.     imagedestroy($QR);  

  22.     return '<img src="qrcode.png" alt="使用微信扫描支付">';     

  23. }  

  24.   

  25. //调用查看结果  

  26. echo scerweima('https://www.baidu.com');  

2. 在生成的二维码中加上logo(生成图片文件)

 

[php] view plain copy 
  1. //2. 在生成的二维码中加上logo(生成图片文件)  

  2. function scerweima1($url=''){  

  3.     require_once 'phpqrcode.php';  

  4.     $value = $url;                  //二维码内容    

  5.     $errorCorrectionLevel = QR_ECLEVEL_H;    //容错级别    

  6.     $matrixPointSize = 6;           //生成图片大小    

  7.     //生成二维码图片  

  8.     $filename = 'qrcode/'.microtime().'.png';  

  9.     QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);    

  10.       

  11.     $logo = 'qrcode/logo.jpg';  //准备好的logo图片     

  12.     $QR = $filename;            //已经生成的原始二维码图    

  13.   

  14.     if (file_exists($logo)) {     

  15.         $QR = imagecreatefromstring(file_get_contents($QR));        //目标图象连接资源。  

  16.         $logo = imagecreatefromstring(file_get_contents($logo));    //源图象连接资源。  

  17.         $QR_width = imagesx($QR);           //二维码图片宽度     

  18.         $QR_height = imagesy($QR);          //二维码图片高度     

  19.         $logo_width = imagesx($logo);       //logo图片宽度     

  20.         $logo_height = imagesy($logo);      //logo图片高度     

  21.         $logo_qr_width = $QR_width / 4;     //组合之后logo的宽度(占二维码的1/5)  

  22.         $scale = $logo_width/$logo_qr_width;    //logo的宽度缩放比(本身宽度/组合后的宽度)  

  23.         $logo_qr_height = $logo_height/$scale;  //组合之后logo的高度  

  24.         $from_width = ($QR_width - $logo_qr_width) / 2;   //组合之后logo左上角所在坐标点  

  25.           

  26.         //重新组合图片并调整大小  

  27.         /* 

  28.          *  imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中 

  29.          */  

  30.         imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);   

  31.     }     

  32.     

  33.     //输出图片    

  34.     imagepng($QR, 'qrcode.png');    

  35.     imagedestroy($QR);  

  36.     imagedestroy($logo);  

  37.     return '<img src="qrcode.png" alt="使用微信扫描支付">';     

  38. }  

  39.   

  40. //调用查看结果  

  41. echo scerweima1('https://www.baidu.com');  


3. 生成二维码(不生成图片文件)

 

[php] view plain copy 
  1. //3. 生成原始的二维码(不生成图片文件)  

  2. function scerweima2($url=''){  

  3.     require_once 'phpqrcode.php';  

  4.       

  5.     $value = $url;                  //二维码内容  

  6.     $errorCorrectionLevel = QR_ECLEVEL_L;    //容错级别   

  7.     $matrixPointSize = 5;           //生成图片大小    

  8.     //生成二维码图片  

  9.     $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);  

  10. }  

  11. //调用查看结果  

  12. scerweima2('https://www.baidu.com');  

*前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。


来自   https://www.cnblogs.com/endv/p/8647611.html



一、使用谷歌Chart API生成URL二维码
完整的API地址:
https://chart.googleapis.com/chart?cht=qr&chs=宽x高&chld=等级|边距&choe=字符编码&chl=内容
参数说明:
cht - 指定一个QR码
chs - 图像大小,单位是像素,是宽x高
choe - 字符编码,默认UTF-8
chld - 分两部分,格式为等级 | 边距。前者是错误校正等级,默认7% L-默认纠错水平,可以识别已损失的7%的数据;M-可以识别已损失15%的数据;Q-可以识别已损失25%的数据;H-可以识别已损失30%的数据;后者是生成的二维码离图片边框的距离,可自行调节。
chl - 生成二维码的内容。包含中文时需使用UTF-8编码汉字,否则将出现问题。
实现:
function createQRbyGoogle($data, $width = '200', $height ='200', $choe = 'UTF-8', $EC_level = 'L', $margin= '0') {
    $chl = urlencode($data);
    return '<img src="http://chart.apis.google.com/chart?cht=qr&chs='.$width.'x'.$height. '&choe='.$choe .'&chld='.$EC_level.'|'.$margin.'&chl='.$chl . '" />';
}
 
$qrcode = createQRbyGoogle($url);
echo $qrcode;    // 直接在浏览器中显示二维码
 
二、使用PHP QRCode类库生成二维码
前提:PHP需开启GD2扩展。
从官网http://phpqrcode.sourceforge.net/下载PHP QR Code类库,目录结构如下:
使用时引用phpqrcode.php即可。
phpqrcode.php提供了一个方法png(),代码如下:
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);
}
其中:
$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 - 是否保存二维码并显示,默认为false(不是很理解这个参数的作用,改为true也没见其他二维码生成)。
实现:
① 浏览器输出二维码:
include "phpqrcode/phpqrcode.php";
$errorCorrectionLevel = "L";
$matrixPointSize = "4";
QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);
 
② 文件输出二维码(浏览器不显示):
include "phpqrcode/phpqrcode.php";
$filename = 'qrcode_' . time();
$errorCorrectionLevel = "L";
$matrixPointSize = "4";
$margin = 2;
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, $margin);
 
③ 生成带logo的二维码:
先使用PHP QR Code生成一张二维码图片,再利用PHP的image相关函数,将事先准备好的logo图片加入到刚生成的原始二维码图片中间,重新生成一张新的二维码图片。
include('phpqrcode/phpqrcode.php');
$filename = 'qrcode_' . time() . '.png';
$errorCorrectionLevel = 'L';
$matrixPointSize = 10;
$margin = 2;
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, $margin);   // 这里参数filename不能为false,必须输出二维码文件
$logo = 'logo.jpg'; //logo的图片地址
$QR = $filename;    //前面生成二维码图片的地址
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_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($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
}
$finalName = 'final.png'; // 带logo二维码的文件名
imagepng($QR, $finalName);  // 最后生成两个二维码,一个为先前生成的不带logo的二维码,如qrcode_1505115861.png,一个为带logo的二维码,即final.png
上述代码最后生成两个二维码,一个为不带logo的二维码,如qrcode_1505115861.png,一个为带logo的二维码,即final.png。
如果想在浏览器中显示二维码,则将上述代码中最后两句改为:
header("Content-type:image/png");
imagepng($QR);
则在浏览器中显示带logo的二维码,但依然会生成一个不带logo的如qrcode_1505115861.png的二维码。
分类: PHP

来自  https://www.cnblogs.com/sunshineliulu/p/7505591.html



php生成二维码


1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/    只需要下载之后文件夹里的phpqrcode文件就行了

2.把phpqrcode放在你要写的php生成二维码的地方  如下   feiji.php是我写代码的

3.第一种是没logo的 代码如下

  1. <?php
  2. // 1. 生成原始的二维码(生成图片文件)
  3. function scerweima($url=''){
  4. require_once 'phpqrcode.php';
  5. $value = $url;         //二维码内容
  6. $errorCorrectionLevel = QR_ECLEVEL_L;  //容错级别
  7. $matrixPointSize = 5;      //生成图片大小
  8. //生成二维码图片
  9. // 判断是否有这个文件夹  没有的话就创建一个
  10. if(!is_dir("qrcode")){
  11. // 创建文件加
  12. mkdir("qrcode");
  13. }
  14. $filename = 'qrcode/'.microtime().'.png';
  15. QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  16. $QR = $filename;        //已经生成的原始二维码图片文件
  17. $QR = imagecreatefromstring(file_get_contents($QR));
  18. //输出图片
  19. imagepng($QR, 'qrcode.png');
  20. imagedestroy($QR);
  21. return '<img src="qrcode.png" alt="使用微信扫描支付">';
  22. }
  23. //调用查看结果
  24. echo scerweima('http://jy.haoyunyun.cn');
  25. ?>

4.第二种是带logo的 代码如下

  1. <?php
  2. //2. 在生成的二维码中加上logo(生成图片文件)
  3. function scerweima1($url=''){
  4. require_once 'phpqrcode.php';
  5. $value = $url;         //二维码内容
  6. $errorCorrectionLevel = QR_ECLEVEL_H;  //容错级别
  7. $matrixPointSize = 6;      //生成图片大小
  8. //生成二维码图片
  9. $filename = 'qrcode/'.microtime().'.png';
  10. QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  11. $logo = 'qrcode/jiang.png'; //准备好的logo图片
  12. $QR = $filename;      //已经生成的原始二维码图
  13. if (file_exists($logo)) {
  14. $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
  15. $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
  16. $QR_width = imagesx($QR);      //二维码图片宽度
  17. $QR_height = imagesy($QR);     //二维码图片高度
  18. $logo_width = imagesx($logo);    //logo图片宽度
  19. $logo_height = imagesy($logo);   //logo图片高度
  20. $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
  21. $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
  22. $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
  23. $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
  24. //重新组合图片并调整大小
  25. /*
  26.     * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
  27.     */
  28. imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
  29. }
  30. //输出图片
  31. imagepng($QR, 'qrcode.png');
  32. imagedestroy($QR);
  33. imagedestroy($logo);
  34. return '<img src="qrcode.png" alt="使用微信扫描支付">';
  35. }
  36. //调用查看结果
  37. echo scerweima1("大胖子");
  38. ?>

 


来自 https://blog.csdn.net/qq_42611547/article/details/84946641



PHP QRCode 生成二维码


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/76640540

I、概念拓展

1).一维条码

一维条码,是由一组粗细不同、黑白(或彩色)相间的条、空及其相应的字符(数字字母)组成的标记,即传统条码。多见于产品包装,可供扫描的地方。

2).二维条码

二维条码,是用某种特定的几何图形按照一定规律在平面(二维方向)上分布的条、空相间的图形(或进行抽象变形后的效果显示)来记录数据符号信息的标记。


  • 二维码分类 根据编码原理 线性堆叠式二维码 矩阵式二维码(又称棋盘式二维条码)

  • 二维码的优缺点 优点:   信息容量大、编码范围广、容错能力强、译码可靠性高、可引入加密措施、成本低易制作 缺点:   二维码技术容易成为手机病毒、钓鱼网站传播的新渠道,信息泄密

II、QRCode(Quick Response Code)

1).二维码标准

目前流行的三大国际标准


  • PDF417 :不支持中文

  • DM : 专利未公开,需要支付专利费用

  • QR Code : 专利公开,支持中文

QR Code 比其他二维码相比,具有识读速度快、数据密度大、占用空间小的优势.

2).QR Code 基本结构

3).QR Code 纠错能力


  • L 级:约可纠错 7% 的数据码字

  • M 级:约可纠错 15% 的数据码字

  • Q 级:约可纠错 25% 的数据码字

  • H级:约可纠错 30% 的数据码字

III、代码实现

以下的代码实现,是基于ThinkPHP 3.2.3框架下的设计,但代码逻辑大同小异,代码已上传github,欢迎参考。

1).php 生成QR Code

代码实现比较简单,需要引入 phpqrcode.php 文件,然后调用 png()方法,可酌情注意该方法中各个字段的使用要求,从而更能符合自己的功能设计需求。

上述方法可直接访问对应的链接进行查看,为了符合html显示效果,自然也可以进行嵌入式的前端显示:

<img src="{:U('QrCode/qrCode')}">

链接显示效果显示如下,通过扫描即可获得其中的信息:

2).jquery 生成 QR Code


  • 可以进入 jeromeetiennegithub 下载源文件.

  • 也可以进入第三方托管库 bootcdn.cn 下载对应的jquery和qrcode文件.

  • 对于第三方的文件,也可以下载一份部署到自己的服务器公共文件,以免对方网站服务影响访问。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="__MJS__/jquery-1.8.0.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/core.js"></script>
<script src="https://cdn.bootcss.com/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
<!--<script src="__MJS__/jquery.qrcode.min.js"></script>-->
<body>
<div id="qrcode"></div>
</body>
<script>
    $("#qrcode").qrcode("Hello world");
    $('#qrcode').qrcode({width: 64,height: 64,text: "Hello Baby"});
</script>
</html>

实现效果如图:

3).PHP 生成电子名片

首先,了解一下  vCard 的概念:

实现代码如下:

 public function qrCode_vcard(){
        vendor("phpqrcode.phpqrcode");
        $content = 'BEGIN:VCARD'."\n";
        $content.= 'VERSION: 1.3.1'."\n";
        $content.= 'N: 毛球'."\n";
        $content.= 'FN: 贝利斯'."\n";
        $content.= 'TEL;WORK;VOICE: 18898989988'."\n";
        $content.= 'TEL;HOME;VOICE: 17789889999'."\n";
        $content.= 'ORG: 阿尔及利亚-安道尔'."\n";
        $content.= 'URL: http:www.moTou.com'."\n";
        $content.= 'END:VCARD'."\n";

        \QRcode::png($content,false,QR_ECLEVEL_L,3,2);
    }


  • 简要介绍代表名词:   N  //姓   FN //名   ORG  //公司地址   TEL;WORK;VOICE  //工作单位电话   TEL;HOME;VOICE  //家里电话   TEL;TYPE=cell  //移动电话     ADR;HOME  //家庭住址   EMAIL    //邮箱   URL  //网址

  • 代码中的具体代表名词,请参考 二维码名片的格式 - vcard

QR Code 生成效果如下:

微信进行扫描后,可以得到下面的结果.

4).PHP 识别二维码

该功能个人觉得整理过于繁杂,但值得学习,建议参考附录视频,希望能帮助小猿们学到一丝有趣的东西。

IV、附录


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于 


来自 https://cloud.tencent.com/developer/article/1333703


利用 PHP QR Code 生成二维码支持 URL 直接调用

 挨踢网络 Young Free!  1年前 (2018-06-09)  2399次浏览  19个评论 扫描二维码 


一不小心,又开始“码代码”了,在此,Young Free 得特别声明:哥真不是学计算机的,也不是搞网络工程的!所有代码都来自网络,哥只是根据自己需要,拼接调整了一下。感谢开源源码的大神们,虽然,Young Free 也不知道大神们叫什么名字。

需求

嗯,码代码前,都是要先分析需求的。

Young Free 主题使用的云落的 Git 主题,这款主题,在文章也右上角,提供了扫二维码在手机上阅读博客的功能。之前 Young Free 一直在调用百度网盘的二维码生成 API,但前几日,百度突然关闭了这个功能,导致 Young Free 博客上的这个二维码功能失效了。

方案

利用第三方服务

几经百度,找到了多个替代解决方案,可大多数都不支持 https 调用,这里就不提及了,唯有搜狐快站支持 https 调用,调用地址如下


自行搭建

虽然免费服务也好用,但保不准那天也会关闭服务,于是,Young Free 就有了搭建一个自己专用的二维码生成服务的想法。既然要搭建,选用构架和脚本语言的问题就来了。

构架

根本谈不上构架,这么个简单的服务,选择一个脚本就行了。百度出来结果一大堆,对于 Young Free 来说可行的有 JAVA, Python, PHP 三种语言编写的方案。Java 和 Python 需要更新 哥的阿里云 ESC 环境,这个工程有点大,所以 PHP 是最适合的。接下来就开始继续度娘可用代码。

算法

PHP 生成二维码的方法一大堆,Young Free 要的是最简单的,所以,算法什么的也是浮云。利用 PHP QR Code 源码,2个文件就能搞定所有需求。

源码下载地址:https://sourceforge.net/projects/phpqrcode/

注意事项:PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

下载下来的一大堆文件,我们只取 phpqrcode.php 一个就行,另外一个 PHP 文件需要我们自己手动写一写。因为不需要在自己服务器上保存二维码,也没有美化的需求,Young Free 百度到了如下可用代码。

不需要美化的终极原因是因为搞不定 QAQ.

问题

这个代码,只能生成源代码里面写好的网址或文字内容的二维码,Young Free 需要的是直接通过 URL 来调用,显然需要改造一下。

既然源码中网址那里是 定量,那可不可以变换成 变量 啊?开干才知道。Young Free 一直在用一个站外链接跳转的中间页,里面就用到了获取 URL 中 跳转目标 URL 的函数。拿过来用用吧。


完善代码


到这里,大功就告成了。其实在 获取目标网址 URL 这个变量这里,折腾了好久,不懂 PHP 的结果就是不知道怎么“打印”获取到的变量为常量,尴尬。

利用 PHP QR Code 生成二维码支持 URL 直接调用

加限制

可 Young Free 并不满足,这个调用地址是可以随随便便手动打开的,没有任何验证,Young Free 的博客可是经常遭到攻击的,不做点限制,VPS 的这点点资源岂不是扛不住。加点限制,非本站站内,不能打开。整个源码如下


调用方式

哦,说了这么多,怎么调用呢?


前台效果

啦啦啦啦~~~如下图,也可以把鼠标移动到文章右上角的 扫描二维码 试试。


来自  https://www.youngfree.cn/seo/2351.html



PHP基于phpqrcode类生成二维码的方法详解

 更新时间:2018年03月14日 10:49:54   作者:江南极客    我要评论

这篇文章主要介绍了PHP基于phpqrcode类生成二维码的方法,结合实例形式详细分析了phpqrcode类的具体功能、使用方法及相关操作注意事项,需要的朋友可以参考下

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:

使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。

前期准备:

1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

方法解读:

下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):

1
2
3
4
5
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);
}

第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
第4个参数$size:控制生成图片的大小,默认为4;
第5个参数$margin:控制生成二维码的空白区域大小;
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;

使用示例:

1. 生成二维码(生成图片文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 1. 生成原始的二维码(生成图片文件)
function scerweima($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = QR_ECLEVEL_L//容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $QR = $filename;        //已经生成的原始二维码图片文件
  $QR = imagecreatefromstring(file_get_contents($QR));
  //输出图片
  imagepng($QR, 'qrcode.png');
  imagedestroy($QR);
  return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima('https://www.baidu.com');

2. 在生成的二维码中加上logo(生成图片文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//2. 在生成的二维码中加上logo(生成图片文件)
function scerweima1($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = QR_ECLEVEL_H//容错级别
  $matrixPointSize = 6;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $logo = 'qrcode/logo.jpg'; //准备好的logo图片
  $QR = $filename;      //已经生成的原始二维码图
  if (file_exists($logo)) {
    $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 / 4;   //组合之后logo的宽度(占二维码的1/5)
    $scale = $logo_width/$logo_qr_width//logo的宽度缩放比(本身宽度/组合后的宽度)
    $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    //重新组合图片并调整大小
    /*
     * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
     */
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
  }
  //输出图片
  imagepng($QR, 'qrcode.png');
  imagedestroy($QR);
  imagedestroy($logo);
  return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima1('https://www.baidu.com');

3. 生成二维码(不生成图片文件)

1
2
3
4
5
6
7
8
9
10
11
//3. 生成原始的二维码(不生成图片文件)
function scerweima2($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = QR_ECLEVEL_L//容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
}
//调用查看结果
scerweima2('https://www.baidu.com');

前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。

PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:

在线生成二维码工具(加强版)
http://tools.jb51.net/transcoding/jb51qrcode

在线二维码解码识别工具
http://tools.jb51.net/transcoding/trans_qrcode

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。


普通分类: