PHP生成二维码中间加头像小图标的方法

当前 PHP 生成二维码的方法简单流行的有几种(php生成二维码方法及二维码名片的生成格式vcard介绍),但是想在生成的二维码中间添加小图片图标需要怎么办呢?下面志文工作室就该问题进行简要的介绍。

添加小图标的原理其实是利用了二维码的容错性,即使丢失了小图标的那一块也仍然可以识别出二维码信息。那么,我们就可以通过在已经生成的二维码图片的基础上,在其中间写入小图标即可。PHP 相关主要代码参考如下:

<?php
$data = 'https://lzw.me/pages/qrcode/';
$size = '100x100';
$logo = 'https://lzw.me/images/gravatar.gif';
$png = "https://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";
$image = imagecreatefrompng($png);
if($logo !== FALSE && ($logo = file_get_contents($logo))){
    $logo = imagecreatefromstring($logo);
    $image_width = imagesx($image);
    $image_height = imagesy($image);
    $logo_width = imagesx($logo);
    $logo_height = imagesy($logo);
    $logo_image_width = $image_width/5;
    $scale = $logo_width/$logo_image_width;
    $logo_image_height = $logo_height/$scale;
    $from_width = ($image_width-$logo_image_width)/2;
    imagecopyresampled($image, $logo, $from_width, $from_width, 0, 0, $logo_image_width, $logo_image_height, $logo_width, $logo_height);
}
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
 ?>

需要注意的是,由于小图标造成了部分二维码的损失,所以生成图片的质量要尽量高一些,而且存储的信息要少,一般主要为网址。

志文工作室基于 phpqrcode 库进行了相关的测试,效果可参考如下:

https://lzw.me/pages/qrcode/?weibo

相关参考:http://www.hack001.com/post/177

点赞 (1)
  1. 林肆说道:
    Google Chrome 28.0.1500.71 Google Chrome 28.0.1500.71 Windows XP Windows XP

    事实上,我的手机太低端了,没法正常的扫描图片,所以没有兴趣研究这个啊。志文兄那里,手机肯定不差的说! :mrgreen:

  2. 相见说道:
    Firefox 19.0 Firefox 19.0 Windows 7 Windows 7

    :razz: :evil:

发表回复

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

Captcha Code