您的位置:首页 > 编程语言 > PHP开发

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

2015-08-12 14:27 555 查看
网上搜索的大部分都是这类代码,用了一下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的二维码图片咯。

//开启缓存
ob_start();
//生成图片
imagepng($QR);
//将图片存入变量
$data = ob_get_contents();
ob_end_clean();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: