当前 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
事实上,我的手机太低端了,没法正常的扫描图片,所以没有兴趣研究这个啊。志文兄那里,手机肯定不差的说!