前些时间修改项目时,无意间看到二维码这一功能,觉着挺新潮的况且现在普及率这么高。于是并未深究,而是照搬他人做留的资料进行了整理,以及弄了个小荔枝(例子)。英语渣,对源码什么的不太懂,这里仅仅只是拿了别人的代码后进行了实现而已。
二维码简介:
二维码原理解析:
一、什么是QR码
QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下:
这个图如果被正确解码,应该看到我的名字和邮箱。
二、QR码的特点
说到QR码的特点,一是高速读取(QR就是取自“Quick Response”的首字母),对读取速度的体验源自于我手机上的一个软件,象上面贴出的码图,通过摄像头从拍摄到解码到显示内容也就三秒左右,对摄像的角度也没有什么要求;
二是高容量、高密度;理论上内容经过压缩处理后可以存7089个数字,4296个字母和数字混合字符,2953个8位字节数据,1817个汉字;
三是支持纠错处理;纠错处理相对复杂,目前我还没有深入了解,按照QR码的标准文档说明,QR码的纠错分为4个级别,分别是:
· level L : 最大 7%的错误能够被纠正;
· level M : 最大 15%的错误能够被纠正;
.....
............
上述资料来源:http://blog.youkuaiyun.com/songylwq/article/details/8643948
备注:自己并非懂这一实现原理,这里只是基于上述博客进行了整理。
JavaWEB实现
一.SpringMVC实现
- 使用杀手锏Ctrl+C Ctrl+V 将上述代码至自己的项目下,直接建Class复制张贴即可。
package cn.thinknet.control;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import cn.thinknet.utils.ewm.TwoDimensionCode;
@Controller
@RequestMapping(value="erwmControl")
public class ErwmControl {
@RequestMapping(value="getErweimaImg")
public void getErweimaImg(HttpServletRequest req,HttpServletResponse resp,HttpSession session){
String url = req.getParameter("url");
TwoDimensionCode handler = new TwoDimensionCode();
BufferedImage image = handler.qRCodeCommon(url, "jpeg", 6);
//2.将图片对象赋值给imageStream属性
ByteArrayOutputStream bos =
new ByteArrayOutputStream();
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(bos);
try {
encoder.encode(image);//将image压缩成jpeg格式
byte[] bytes = bos.toByteArray();
//上面都是生成图片,SpringMvc中如何将图片展现,主要是以下
OutputStream stream = resp.getOutputStream();
stream.write(bytes);
stream.flush();
stream.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
<script type="text/javascript">
$(function(){
$(".pimg").click(function(){
var pid=$(this).attr("pid");
window.parent.location.href="<%=basePath%>downformph?productid=" + pid;
});
});
</script>
<img src="${p.icon }" class="pimg" pid="${p.id }" width="912" height="150" >
二.Struts2实现
<package name="struts2" extends="json-default" > <action name="twoimage" class="com.out.download.TwoImageAction">
<result name="success" type="stream">
<param name="inputName">imageStream</param>
</result>
</action>
</package>
action
package com.out.download;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.wrt.utils.TwoDimensionCode;
public class TwoImageAction {
private InputStream imageStream;
private String url;
public String execute(){
TwoDimensionCode handler = new TwoDimensionCode();
BufferedImage image = handler.qRCodeCommon(url, "jpeg", 6);
//2.将图片对象赋值给imageStream属性
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
try {
encoder.encode(image);//将image压缩成jpeg格式
//将图片压缩结果从bos中取出,给imageStream
byte[] bytes = bos.toByteArray();
imageStream = new ByteArrayInputStream(bytes);
return "success";//result(stream)
} catch (Exception e) {
e.printStackTrace();
return "success";//result(stream)
}
}
public InputStream getImageStream() {
return imageStream;
}
public void setImageStream(InputStream imageStream) {
this.imageStream = imageStream;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}



