用百度BAE Image服务生成QR二维码

2013-05-26

QR二维码

我曾在几个月前移植了一个叫“Migs for 百度BAE”的图床程序。受到当时条件的限制,我采用的是Fetch URL方式生成略缩图,但这种方式效率低并且浪费流量。因为后来百度BAE推出了Image服务,加上一些网友反映有时不能正常生成略缩图的情况,所以我于昨天用BAE的Image服务把略缩图生成模块重写了一下。

我在阅读BAE Image服务文档的过程中,我发现这真是个好东西啊——不仅支持最简单的图片缩放、图片裁剪、文字水印、图片合成功能,而且支持二维码生成和WebP格式图片转换!

目前常用的二维码生成服务是Google Chart提供的二维码API,通过调用

https://chart.googleapis.com/chart?cht=qr&chs=200x200&choe=UTF-8&chld=L|4&chl=https://mawenjian.net/

来生成二维码图像。但众所周知,Google服务的是某几个国家之外的世界,加之传输内容需经过入侵检测装置,所以其服务质量不仅取决于其自身的技术实力。

与Google的服务相比,BAE的优势有二:第一、服务器位于国内,更稳定,响应速度更快;第二、可以自定义的参数更多,不仅支持自定义图片大小,更可以设置二维码的前景色及背景色。

BAE的二维码服务也有缺点——因为二维码生成属于BAE Image服务的一部分,必须在BAE环境中才能使用。如果想在别处用的话,需要在BAE把Image服务封装成API接口,好在这个工作非常简单。

下面是一个利用BAE生成二维码的简单例子:

<?php
require_once('BaeImageService.class.php');
$text ="欢迎访问马文建的博客 - https://mawenjian.net/";
//创二维码操作的对象BaeImageQRCode
$baeImageQRCode = new BaeImageQRCode();
$baeImageQRCode->setText($text);
$baeImageQRCode->setLevel(3);
$baeImageQRCode->setVersion(10);
$baeImageQRCode->setSize(2);
//创建服务功能对象
$baeImageService = new BaeImageService();
$retVal = $baeImageService->applyQRCodeByObject($baeImageQRCode);
if($retVal !==false && isset($retVal['response_params']) && isset($retVal['response_params']['image_data'])){
header("Content-type:image/jpg");
$imageSrc = base64_decode($retVal['response_params']['image_data']);
echo $imageSrc;
}else{
echo 'qr encoding failed, error:' . $baeImageService->errmsg() . "\n";
}
?>

 

生成的QR二维码如下:

QR二维码

QR二维码

BAE二维码相关的文档:

http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/php/image


除非特殊说明,本博客文章均为原创,转载请以链接形式标明博文地址。

本文链接地址: 用百度BAE Image服务生成QR二维码

分类:互联网 | 标签: |

10 条评论

  1. 浮夸的晓编说道:

    BaeImageService.class.php 这文件在那啊?

  2. 青沥树说道:

    非技术流路过。。顶一个

  3. php说道:

    BaeImageService.class.php 这个类在哪里下

    • 马文建说道:

      在BAE1.0中,系统是带这个库的,2.0开始就需要引入了。现在应该是在BAE Image服务的SDK中吧,好久没关注了。如果没有的话,就采用现在BAE的Image接口。

  4. 神情话意说道:

    TAT..."您的服务配额不足,无法新增服务"

  5. 仁哲说道:

    需要在BAE把Image服务封装成API接口,好在这个工作非常简单。

    马哥 求教 怎么封装成API借口呢

    • 马文建说道:

      哈哈,这还不简单,在BAE上建一个PHP页面,接受外部调用的参数,把参数传给Image服务处理,然后将生成结果反馈给调用端(即将结果输出)就完了。

  6. Dprince说道:

    菜鸟流伤不起啊

发表回复

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