使用zxing生成二维码 - servlet形式

因为项目有个功能需要打印二维码,因为我比较喜欢使用html+css+js实现,所以首先想到的是jquery.qrcode.js插件,这个插件可以用canvas和table生成二维码,效果也不错,不过对中文支持有问题,这个插件默认使用canvas,所以使用IE的时候,需要指定参数render,只要参数值不是canvas就会用table生成。由于这个问题,我在github,fork了一个,做了如下的修改:

[javascript] view
plain
 copy

  1. //true if support  
  2.         function canvasSupport() {  
  3.             return !!document.createElement('canvas').getContext;  
  4.         }  
  5.         return this.each(function(){  
  6.             //if the browser not support canvas,then table.  
  7.             if(!canvasSupport()){  
  8.                 options.render = "table";  
  9.             }  
  10.             var element = options.render == "canvas" ? createCanvas() : createTable();  
  11.             $(element).appendTo(this);  
  12.         });  

修改后就不需要指定render参数,如果不支持canvas就会用table.

使用canvas有个缺点就是网页打印的时候显示不出来...这个问题好像已经有解决办法了,我没有去找,我直接用的table。不过打印似乎仍然有问题。

jquery.qrcode.js插件地址:https://github.com/jeromeetienne/jquery-qrcode

js有问题,所以只能通过zxing来输出二维码,写了如下的servlet代码:

[java] view
plain
 copy

  1. @SuppressWarnings("serial")  
  2. public class QrCodeServlet extends HttpServlet {  
  3.     private static final int BLACK = -16777216;  
  4.     private static final int WHITE = -1;  
  5.       
  6.     private BufferedImage toBufferedImage(BitMatrix matrix) {  
  7.         int width = matrix.getWidth();  
  8.         int height = matrix.getHeight();  
  9.         BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_ARGB);  
  10.         for (int x = 0; x < width; x++) {  
  11.             for (int y = 0; y < height; y++) {  
  12.                 image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);  
  13.             }  
  14.         }  
  15.         return image;  
  16.     }  
  17.       
  18.     @Override  
  19.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  20.             throws ServletException, IOException {  
  21.         try {  
  22.             String content = req.getParameter("m");  
  23.             if(content==null||content.equals("")){  
  24.                 resp.setContentType("text/plain;charset=UTF-8");  
  25.                 resp.getOutputStream().write("二维码内容不能为空!".getBytes("utf-8"));  
  26.                 resp.getOutputStream().close();  
  27.             }  
  28.             int imgWidth = 110;  
  29.             int imgHeight = 110;  
  30.               
  31.             String width = req.getParameter("w");  
  32.             String height = req.getParameter("h");  
  33.             if(width!=null&&!width.equals("")){  
  34.                 try {  
  35.                     imgWidth = Integer.parseInt(width);  
  36.                 } catch (Exception e) {}  
  37.             }  
  38.             if(height!=null&&!height.equals("")){  
  39.                 try {  
  40.                     imgHeight = Integer.parseInt(height);  
  41.                 } catch (Exception e) {}  
  42.             }  
  43.               
  44.             BitMatrix byteMatrix;  
  45.             Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();  
  46.             hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);  
  47.             byteMatrix = new MultiFormatWriter().encode(  
  48.                     new String(content.getBytes("UTF-8"),"ISO-8859-1"),  
  49.                     BarcodeFormat.QR_CODE,   
  50.                     imgWidth,   
  51.                     imgHeight,   
  52.                     hints);  
  53.   
  54.             BufferedImage image = toBufferedImage(byteMatrix);  
  55.             resp.setContentType("image/png");  
  56.             ImageIO.write(image, "png", resp.getOutputStream());    
  57.         } catch (Exception e) {  
  58.               
  59.         }  
  60.     }  
  61. }  

参数m必须有,参数h、w可选,默认的宽高为110px。

由于zxing默认的编码为ISO-8859-1,所以使用其他编码的时候会出现乱码,即使执行其他的编码方式,还是有问题,如果转换为ISO-8859-1就没有乱码。

还有一个很重要的内容,就是使用zxing的时候必须导出png格式的二维码,导出jpg格式的时候,颜色就不是黑白的,很让人费解,希望有人能给出原因。

二维码效果图:

时间: 2024-10-30 12:58:38

使用zxing生成二维码 - servlet形式的相关文章

使用zxing生成二维码 扫二维码进行页面跳转问题

问题描述 使用zxing生成二维码 扫二维码进行页面跳转问题 @RequestMapping(value=""createQRCode"" method = RequestMethod.GET) public void createQRCode(HttpServletRequest request HttpServletResponse response) throws IOException { JSONObject json = new JSONObject()

c#-C# zxing生成二维码扫不出

问题描述 C# zxing生成二维码扫不出 我用的是zxing.dll 生成的二维码,但是里面放的内容一多久模糊了,很难扫,可以说基本扫不出来.这个问题怎么解决? 解决方案 看下你的摄像头对焦有没有问题,一些摄像头需要手工调焦的,确保图像清晰

Android Zxing生成二维码经典案例分享_Android

本文实例为大家解析了Zxing生成二维码的经典案例,供大家参考,具体内容如下 1.首先呢,先编译 compile 'com.google.zxing:core:3.2.1' 2.实战 public class QRCode { private static int IMAGE_HALFWIDTH = 50;//宽度值,影响中间图片大小 /** * 生成二维码,默认大小为500*500 * * @return bitmap */ public static Bitmap createQRCode(

Android Zxing生成二维码经典案例分享

本文实例为大家解析了Zxing生成二维码的经典案例,供大家参考,具体内容如下 1.首先呢,先编译 compile 'com.google.zxing:core:3.2.1' 2.实战 public class QRCode { private static int IMAGE_HALFWIDTH = 50;//宽度值,影响中间图片大小 /** * 生成二维码,默认大小为500*500 * * @return bitmap */ public static Bitmap createQRCode(

java ZXing生成二维码及条码实例分享_java

1.jar包:   ZXing-core-3.3.0.jar http://mvnrepository.com/artifact/com.google.zxing/core   ZXing-javase-3.3.0.jar   http://mvnrepository.com/artifact/com.google.zxing/javase BufferedImageLuminanceSource.java package com.webos.util; import java.awt.Grap

Android平台利用ZXING生成二维码图片

zxing是google的一个开源二维码项目,目前基本上和二维码打交道的东西,都会用到它. 最近项目中用到了android手机需要根据提供的字符串生成二维码图片,之前用zxing做过二维码解码,编码还没做过,看了一些demo都是用到了zxing的j2se包的内容,这个在android或者其他平台上显然无法实现,所以我们要利用zxing生成二维矩阵,然后根据android平台的提供的api来生成图片. /** * 用字符串生成二维码 * @param str * @author zhouzhe@l

Android使用zxing生成二维码,边框自定义宽度

1.基本方法 //二维码容错率,分四个等级:H.L .M. Q         ErrorCorrectionLevel level = ErrorCorrectionLevel.H;             String qrName = "test.png"; //生成二维码图片名称         String targetPath = ServletActionContext.getServletContext().getRealPath("/");  //

Android中使用ZXing生成二维码(支持添加Logo图案)

ZXing是谷歌的一个开源库,可以用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing/releases 或者在这里下载(只有本项目所用的jar包,版本号:3.2.0):链接:http://pan.baidu.com/s/1pLqAR5x 1.生成二维码的工具类 /** * 二维码生成工具类 */ public class QRCodeUtil { /** * 生成二维码Bitmap

android 使用开源库zxing生成二维码,扫描二维码【转】

转自:http://blog.csdn.net/qq_16064871/article/details/52422723 zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口.可以实现使用手机的内置的摄像头完成条形码和二维码的扫描与解码.可以实现条形码和二维码的编码与解码. github官网源码地址:https://github.com/zxing/zxing 开源库api文档:https://zxing.github.io/zxing/a