最近在某论坛上看到Zxing 这个插件 , 决定用用 !首先它是用于生成二维码的 , 类似于登录时的验证码 , 他也是从后台生成一张图片 , 只不过二维码图案涉及一定算法 , 并且有一定的规律 ,这些都是前辈们定好了 ,并且已经把这里面复杂的代码封装了 , 接下来的工作就简单了!相关文章:http://developer.51cto.com/art/201310/414082_all.htm
首先在网上搜索Zxing ,或者去 maven repository下载zxing jar!
1、手动添加如下代码(核心实现)
1 package com.wisesoft.ztree.util; 2 import com.google.zxing.common.BitMatrix; 3 import javax.imageio.ImageIO; 4 import java.io.File; 5 import java.io.OutputStream; 6 import java.io.IOException; 7 import java.awt.image.BufferedImage; 8 public final class MatrixToImageWriter { 9 PRivate static final int BLACK = 0xFF000000;10 private static final int WHITE = 0xFFFFFFFF;11 private MatrixToImageWriter() {12 }13 public static BufferedImage toBufferedImage(BitMatrix matrix) {14 int width = matrix.getWidth();15 int height = matrix.getHeight();16 BufferedImage image = new BufferedImage(width, height,17 BufferedImage.TYPE_INT_RGB);18 for (int x = 0; x < width; x++) {19 for (int y = 0; y < height; y++) {20 image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);21 }22 }23 return image;24 }25 public static void writeToFile(BitMatrix matrix, String format, File file)26 throws IOException {27 BufferedImage image = toBufferedImage(matrix);28 if (!ImageIO.write(image, format, file)) {29 throw new IOException("Could not write an image of format "30 + format + " to " + file);31 }32 }33 public static void writeToStream(BitMatrix matrix, String format,34 OutputStream stream) throws IOException {35 BufferedImage image = toBufferedImage(matrix);36 if (!ImageIO.write(image, format, stream)) {37 throw new IOException("Could not write an image of format "38 + format);39 }40 }41 }42 43MatrixToImageWriter
“matrix.get(x, y) ? BLACK : WHITE” MatrixToImageWriter 类是绘制图形的核心类 , 通过循环每一个像素点 , 并且询问BitMatrix.get(x,y)返回时true或者false 决定绘制黑白条纹
2、二维码规格定义部分
1 package com.wisesoft.ztree.controller; 2 import java.io.IOException; 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import com.google.zxing.BarcodeFormat; 8 import com.google.zxing.MultiFormatWriter; 9 import com.google.zxing.WriterException;10 import com.google.zxing.common.BitMatrix;11 import com.wisesoft.ztree.util.MatrixToImageWriter;12 13 @Controller14 @RequestMapping("/qr")15 public class QRController {16 @RequestMapping("put")17 public void qr(HttpServletRequest req,HttpServletResponse resp) throws WriterException, IOException{18 String contents = "http://sqdd.myapp.com/myapp/QQteam/AndroidQQ/mobileqq_android.apk"; //二维码链接地址19 int width = 300; //生成二维码宽度20 int height = 300; //高度21 String format = "png"; //二维码文件格式 22 BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height); //xzing插件核心,将参数传入23 //MatrixToImageWriter.writeToFile(bitMatrix,format, new File("D://qq_download.png")); //将生成的二维码写入文件中24 MatrixToImageWriter.writeToStream(bitMatrix,format, resp.getOutputStream()); //将生成的二维码放入流中25 //MatrixToImageWriter.toBufferedImage(matrix); 26 }27 }QRController
writeToStream 的三个参数 , 第一个是BitMatrix对象 ,第二个 是format为图片格式 ,第三个是一个输出流对象
如果format格式不对:
MatrixToImageWriter.writeToStream(bitMatrix,"aaaaa", resp.getOutputStream());
异常:
"Could not write an image of format aaaaa"
新闻热点
疑难解答