PHP基于PHP QR Code生成带不失真logo二维码

最近项目要搞一个生成带logo二维码的接口

google了下有一个超级强大的二维码库PHP QR Code

这里有供快速上手的例子,个人认为不太容易懂http://phpqrcode.sourceforge.net/examples/index.php

找了半天貌似官方库,没有一个二维码中间加logo的功能

给跪了

网上再次搜索了下大部分都是这类代码,用了一下logo都失真了。

 
$text = 'http://www.funboxpower.com';
$logo = "i/logo.png"; //加的logo可以是本地路径也可以是网址

$errorCorrectionLevel = 3;//容错级别   
$matrixPointSize = 9;//生成图片大小   生成大概400*400的二维码

//生成二维码图片
$QR = "i/qrcode.png"; //临时保存的文件名i文件夹里面
QRcode::png($text, $QR, $errorCorrectionLevel, $matrixPointSize, 2);
//加logo
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 / 4;
$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);   
imagedestroy($QR);

查了涉及到的相关php自带函数,发现是imagecopyresampled的原因,图片合并后的质量会被$OR影响

那就查看生成二维码的代码,果然QRimage类下的方法image下由两处地方生成图片都用imagecreate,将其改为imagecreatetruecolor,这样就会生成不失真logo的二维码图片咯。

 代码有些不足就是总是要存一次没有加logo的二维码,然后在读出来,下次再研究吧,phpqrcode应该可以输出图片流吧。。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注