其他分享
首页 > 其他分享> > 二维码的生成细节和原理

二维码的生成细节和原理

作者:互联网

基础知识参考http://news.cnblogs.com/n/191671/

二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:

比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,

基础知识

  首先,我们先说一下二维码一共有 40 个尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩阵,Version 2 是 25 x 25 的矩阵,Version 3 是 29 的尺寸,每增加一个 version,就会增加 4 的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高 Version 40,(40-1)*4+21 = 177,所以最高是 177 x 177 的正方形。

PHP实现生成二维码(可运用于推广,分销业务等)

方法一:用PHP二维码生成类库QRcode,很好用,简单快捷!

qrcocde下载

二维码是一个近几年来移动设备上超流行的一种编码方式,最早出现在20世纪20年代,到1988年才引入中国。现在,日常生活中更是随处可见。它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。下面通过一些小案例,不靠第三方平台,轻松制作自己的二维码图片

QRCode
QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
超高速
从QR Code码的英文名称Quick Response Code可以看出,超高速识读特点是QR Code码区别于四一七条码、Data Matrix等二维码的主要特性。由于在用CCD识读QR Code码时,整个QR Code码符号中信息的读取是通过QR Code码符号的位置探测图形,用硬件来实现,因此,信息识读过程所需时间很短,它具有超高速识读特点。用CCD二维条码识读设备,每秒可识读30个含有100个字符的QR Code码符号;对于含有相同数据信息的四一七条码符号,每秒仅能识读3个符号;对于Data Matrix矩阵码,每秒仅能识读2~3个符号。QR Code码的超高速识读特性使它能够广泛应用于工业自动化生产线管理等领域。
全方位
QR Code码具有全方位(360°)识读特点,这是QR Code码优于行排式二维条码如四一七条码的另一主要特点,由于四一七条码是将一维条码符号在行排高度上的截短来实现的,因此,,它很难实现全方位识读,其识读方位角仅为±10°。
能够有效地表示汉字
由于QR Code码用特定的数据压缩模式表示汉字,它仅用13bit可表示一个汉字,而四一七条码、Data Matrix等二维码没有特定的汉字表示模式,因此仅用字节表示模式来表示汉字,在用字节模式表示汉字时,需用16bit(二个字节)表示一个汉字,因此QR Code码比其它的二维条码表示汉字的效率提高了20%。
参数$level表示容错率,也就是有被覆盖的区域还能识别。它有四个级别,分别是 L, H, M, Q
QR_ECLEVEL_L,    最大 7% 的错误能够被纠正;
QR_ECLEVEL_M,  最大 15% 的错误能够被纠正;
QR_ECLEVEL_Q,   最大 25% 的错误能够被纠正;
QR_ECLEVEL_H,   最大 30% 的错误能够被纠正;

实现代码:

带logo

include 'phpqrcode.php';
$value = 'http://www.cnblogs.com/itzhangxuhui'; //二维码内容
$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 6;//生成图片大小
QRcode::png($value, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2);
//生成二维码图片
$logo = 'logo.jpg';//准备好的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,'phpmaster.png');

无需logo

//引入核心库文件
include "phpqrcode/phpqrcode.php";
//定义纠错级别
$errorLevel = "L";
 //定义生成图片宽度和高度;默认为3
$size = "4";
//定义生成内容
// $content="尝试一下内容测试";
//调用QRcode类的静态方法png生成二维码图片//
// QRcode::png($content, false, $errorLevel, $size);
//生成网址类型
$url="http://www.lpcblog.com/";
QRcode::png($url, false, $errorLevel, $size);

  

标签:Code,识读,细节,生成,width,二维码,QR,logo
来源: https://www.cnblogs.com/mangofish/p/16063433.html