如今二维码场景应用的十分广泛,那如何用php生成含有logo的二维码呢?在实际应用中,我们会在二维码的中间加上自己的LOGO,已增强宣传效果。

处理思路:

其实原理很简单,先使用PHP QR Code生成一张二维码图片,然后再利用php的image相关函数,将事先准备好的logo图片加入到刚生成的原始二维码图片中间,然后重新生成一张新的二维码图片。

准备阶段:

PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo。

查看地址:http://phpqrcode.sourceforge.net/

下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2。


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 表示是否保存二维码并显示。

php代码:

/**
 * @param $title    二维码中的内容
 * @param $qrimgurl 二维码生成地址
 * @param $logourl  头像地址
 * @param $width    logo生成的宽
 * @param $height   logo生成的高
 * @param $fileurl  保存的路径名
 */
function thumb($title,$qrimgurl,$logourl,$width,$height,$fileurl){
    header('Content-type: image/png');
    require_once 'phpqrcode/phpqrcode.php';
    // 生成一个二维码
    $qr = new \QRcode();
    //生成文件
    $qr::png($title,$qrimgurl,QR_ECLEVEL_H,4,2,true);
    // 将头像文件缩小 并放置到二维码当中
    list($s_width,$s_height) = getimagesize($logourl);
    list($d_width,$d_height) = getimagesize($qrimgurl);
    // 将图片裁减为指定的大小 50*50
    $blank = imagecreatetruecolor($width,$height);
    $logo  = imagecreatefromstring(file_get_contents($logourl));
    imagecopyresampled($blank,$logo,0,0,0,0,$width,$height,$s_width,$s_height);
    $qrimage    = imagecreatefromstring(file_get_contents($qrimgurl));
    // 获取二维码的宽高 算出比例 放在图片的中间
    $m_width = round(($d_width - $width)/2,0);
    $m_height= round(($d_height- $height)/2,0);
    imagecopymerge($qrimage,$blank,$m_width,$m_height,0,0,$width,$height,100);
    // 合成新图像
    imagepng($qrimage,$fileurl);
    imagedestroy($qrimage);
    imagedestroy($blank);
}
$title = '双击屏幕666';
$qrimgurl = 'qr.png';
$logourl  = 'logo.png';
$width    = 30;
$height   = 30;
$fileurl  = 'thumb.png';
thumb($title,$qrimgurl,$logourl,$width,$height,$fileurl);


通过上面的方法就可以轻松的实现用php生成二维码带logo头像居中的方法。

可能有朋友疑问,为什么在二维码的中间加入logo,还是可以扫出来?

由于二维码允许有一定的容错性,一般的二维码即使在遮住部分但仍然能够解码,经常我们扫描二维码的时候扫描到甚至不到一半时就能解码扫描结果,这是因为生成器会将部分信息重复表示来提高其容错度,这就是为什么我们在二维码中间加个LOGO图片并不影响解码结果的原因。

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!