最新消息:博客断断续续关停过,感谢保留友链的友们,以后本博客可能会比较少更新,但是会一直开下去,并保持稳定性。

PHP生成带LOGO的QR二维码单文件完美无错版

技术交流 东子 3425次浏览 4 条评论 无图浏览

想给博客文章页加个二维码,提升体验的,但是网上的插件什么的太臃肿了。后来找了好多终于找到了个还不错的PHP通过google api生成QR图的方法,就一个文件,比较简单实用。但是在参数不齐全的时候比如没有填上要生成的目标地址,又或者(附加的)LOGO图片地址为空或者LOGO图片地址不是一个正确的图片时,也会报错报错就报错吧,还暴露了服务器的物理(真实)路径,这个就不爽了,调试了将近两个小时,终于搞定了几乎能想到的BUG,也欢迎友友们提出仍然存在的BUG。原核心代码地址:http://www.oschina.net/code/piece_full?code=21780&piece=36363

使用方法

把以下代码保存到一个php文件里,我是这样做的:在根目录新建一个文件夹命名为qr。然后在目录下新建一个名为index.php的文件,把下面的代码粘贴进去即可。这样就可以通过以下地址访问:?url=http://blog.kilvn.com/&size=200&logo=http://blog.kilvn.com/uploads/config/ico.png

参数说明:

?url=后面填写要生成二维码的目标地址,必填,大家懂得&size=后面填要生成二维码图片的尺寸,默认为200,可以不填&logo=后面填要加LOGO图片的地址,可以不填

<?php
	header("Content-type: text/html; charset=utf-8");
	error_reporting(0); //屏蔽所有错误提示

	if(empty($_GET[url])){
		echo "请输入地址后再试!
		<br/><br/><small>推荐参数:<font color='red'>?url=要生成的地址</font><font color='green'>&size=要生成的尺寸 默认200x200</font><font color='#f60'>&logo=logo图片地址</font></small>";
	}else{
		// QR Code + Logo Generator QR图片中间加logo
		$data = isset($_GET['data']) ? $_GET['data'] : $_GET[url];		//二维码地址
		if(empty($_GET[size])){
			$size = isset($_GET['size']) ? $_GET['size'] : '200';		//尺寸为空时默认200
		}else{
			$size = isset($_GET['size']) ? $_GET['size'] : $_GET[size];		//获取的尺寸参数
		}
		if(empty($_GET[logo])){
			$logo = isset($_GET['logo']) ? $_GET['logo'] : 'http://blog.kilvn.com/uploads/config/ico.png';				//LOGO图地址为空时的默认参数
		}else{
			$logo = isset($_GET['logo']) ? $_GET['logo'] : $_GET[logo];		//中间logo图
		}

		// 通过google api生成未加logo前的QR图,也可以自己使用RQcode类生成
		$png = 'http://chart.googleapis.com/chart?chs='.$size.'&cht=qr&chl='.urlencode($data).'&chld=L|1&choe=UTF-8';

		$QR = imagecreatefrompng($png);

		if($logo !== FALSE){
			$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.5;
			$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);
	}

其中橙色的是我后来为了各种BUG加上的,有什么含义,各位自己意会~感言:虽然费了老大的劲各种翻手册查问题,但是还是实现了想要的功能,之前的想法:兄弟连没白去果然没说错啊~!哈哈!

声明:欢迎转载,转载请注明来源:东子博客。  本文地址链接:http://blog.kilvn.com/php-qr-logo/

发表我的评论
取消评论
表情 每日打卡 贴图 链接 私密消息

Hi,您需要填写昵称和邮箱!

  • 昵称
  • 邮箱
  • 网址

网友最新评论 (4)

  1. 匿名2014-03-26 23:53 🙁回复
  2. 幻想夏鄕2014-03-26 08:28 牛x回复
    • 东子2014-03-26 08:33 呵呵,各种查解决问题之后感觉还是蛮好的,多多学习新知识吧 😡回复