java 生成二维码 实践 图片流形式

今天在写项目的时候有几百条资源的下载需要生成二维码,就在网上找了一些材料,发现都是直接生成图片。

成千上万的数据生成图片,对于图片的存储实在是麻烦,之前做过php的二维码 ,就是以流的形式在页面显示

所以用java我也想这么干

网上找到的生成二维码的jar包 不变 qrcodeswetake.jar

我的是maven项目,那个生成二维码的jar不在仓库,哎,自己放在了lib包下,maven中配置

<!--二维码jar -->
<dependency>
<groupId>swetake</groupId>
<artifactId>swetake</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/qrcodeswetake.jar</systemPath>
</dependency>
<!--二维码jar -->


import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import com.swetake.util.Qrcode;

public class QRCodeUtil {

private static int LEVEL = 7;

private static int WIDTH = 140;

private static int HEIGHT = 140;

private static String PATH = "/";

private static int PIXOFF = 2;

//
public QRCodeUtil(String path){

QRCodeUtil.PATH = path;

}

/**
* 生成二维码
* */
public static BufferedImage encodeQRCode(String content){
BufferedImage bufImg = null;
try {
Qrcode qrcodeHandle = new Qrcode();
qrcodeHandle.setQrcodeErrorCorrect('M');
qrcodeHandle.setQrcodeEncodeMode('B');
qrcodeHandle.setQrcodeVersion(QRCodeUtil.LEVEL);
byte[] contentBytes = content.getBytes("UTF-8");
bufImg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, WIDTH, HEIGHT);
gs.setColor(Color.BLACK);
int pixoff = QRCodeUtil.PIXOFF;
if(contentBytes.length>0&&contentBytes.length<120){
boolean[][] codeOut = qrcodeHandle.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if(codeOut[j][i]){
gs.fillRect(j*3+pixoff, i*3+pixoff, 3, 3);
}
}
}
}else{
System.err.println("生成二维码的内容小于2个字符或者大于120个字符");
}
gs.dispose();
bufImg.flush();
// File file = new File("new.png");
// ImageIO.write(bufImg, "png", file);
} catch (Exception e) {
e.printStackTrace();
}
return bufImg;
}
}

 

以上工具类代码

controller中这么写

/**
* 生成二维码
* */
@RequestMapping(value = "qrcode")
public void qrcode(HttpServletRequest httpServletRequest,HttpServletResponse response,String url){
BufferedImage bi = QRCodeUtil.encodeQRCode(url);
//设置响应头通知浏览器以图片的形式打开
response.setContentType("image/jpeg");//等同于response.setHeader("Content-Type", "image/jpeg");
//设置响应头控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
//将图片写给浏览器
try {
ImageIO.write(bi, "jpg", response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}

 

jsp中这么写

 

 <img alt="" src="${ctx }/qrcode?url=http://www.baidu.com">

 

posted @ 2015-08-21 16:13  写代码的小姐姐  阅读(890)  评论(0)    收藏  举报