https://www.php.cn/php-weizijiaocheng-402924.html
最简单最实例的goolge开源方法
1.google开放api
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$urlToEncode= "http://www.helloweba.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. '"/>' ;
}
|
2.php类库PHP QR Code
地址:http://phpqrcode.sourceforge.net/
下载:http://sourceforge.net/projects/phpqrcode/
下载官网提供的类库后,只需要使用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表示是否保存二维码并显示。
代码如下:
1
2
3
4
5
6
|
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:
1
2
|
include 'phpqrcode.php' ;
QRcode::png( 'http://www.helloweba.com' );
|
实际应用中,我们会在二维码的中间加上自己的LOGO,已增强宣传效果。那如何生成含有logo的二维码呢?其实原理很简单,先使用PHP QR Code生成一张二维码图片,然后再利用php的image相关函数,将事先准备好的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
|
include 'phpqrcode.php' ;
$value = 'http://www.helloweba.com' ; //二维码内容
$errorCorrectionLevel = 'L' ;
$matrixPointSize = 6;
QRcode::png( $value , 'qrcode.png' , $errorCorrectionLevel , $matrixPointSize , 2);
$logo = 'logo.png' ;
$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_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 );
}
imagepng( $QR , 'helloweba.png' );
echo '<img src="helloweba.png">' ;
|
对于第二种方法:如果不使用$filename,第二个参数为false的时候,就不会把二维码图片保存,而是直接输出。
现在还有一些如有:libqrencode与QRcode Perl CGI & PHP scripts二维码生成插件大家喜欢也可看看。
3.基于jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码。
qrcode其实是通过使用jQuery实现图形渲染,画图,支持canvas(HTML5)和table两种方式,
可以到https://github.com/jeromeetienne/jquery-qrcode获取最新的代码。
如何使用
(1)、首先在页面中加入jquery库文件和qrcode插件。
1
|
<script type= "text/javascript" src= "jquery.js" ></script> <script type= "text/javascript" src= "jquery.qrcode.min.js" ></script>
|
(2)、在页面中需要显示二维码的地方加入以下代码:
(3)、调用qrcode插件。
qrcode支持canvas和table两种方式进行图片渲染,默认使用canvas方式,效率最高,当然要浏览器支持html5。直接调用如下:
1
|
$( '#code' ).qrcode( "http://www.helloweba.com" ); //任意字符串
|
您也可以通过以下方式调用:
1
2
3
4
5
|
$( "#code" ).qrcode({
render: "table" ,
200,
height:200,
text: "www.helloweba.com"
|
这样就可以在页面中直接生成一个二维码,你可以用手机“扫一扫”功能读取二维码信息。
(4).识别中文
我们试验的时候发现不能识别中文内容的二维码,通过查找多方资料了解到,jquery-qrcode是采用charCodeAt()方式进行编码转换的。而这个方法默认会获取它的Unicode编码,如果有中文内容,在生成二维码前就要把字符串转换成UTF-8,然后再生成二维码。您可以通过以下函数来转换中文字符串:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function toUtf8(str) {
var out, i, len, c;
out = "" ;
len = str.length;
for (i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
}
}
return out; }
|
以下示例:
1
2
|
var str = toUtf8( "普罗旺斯没有故事" );
$( '#code' ).qrcode(str);
|