生成二维码之 Java (Google zxing) 篇

  • 参考资料

  • 项目环境

    • jdk1.8(**zxing 生成二维码图片文件需要 jdk1.7 及以上版本 **)
    • zxing-javase
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.3.0</version>
    </dependency>
    
    • 工具类代码
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 二维码工具类
     */
    public class QRCodeUtil {
        private static final int width = 300;// 默认二维码宽度
        private static final int height = 300;// 默认二维码高度
        private static final String format = "png";// 默认二维码文件格式
        private static final Map<EncodeHintType, Object> hints = new HashMap();// 二维码参数
    
        static {
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 字符编码
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 容错等级 L、M、Q、H 其中 L 为最低, H 为最高
            hints.put(EncodeHintType.MARGIN, 2);// 二维码与图片边距
        }
        /**
         * 返回一个 BufferedImage 对象
         * @param content 二维码内容
         * @param width   宽
         * @param height  高
         */
        public static BufferedImage toBufferedImage(String content, int width, int height) throws WriterException, IOException {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            return MatrixToImageWriter.toBufferedImage(bitMatrix);
        }
        /**
         * 将二维码图片输出到一个流中
         * @param content 二维码内容
         * @param stream  输出流
         * @param width   宽
         * @param height  高
         */
        public static void writeToStream(String content, OutputStream stream, int width, int height) throws WriterException, IOException {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            MatrixToImageWriter.writeToStream(bitMatrix, format, stream);
        }
        /**
         * 生成二维码图片文件
         * @param content 二维码内容
         * @param path    文件保存路径
         * @param width   宽
         * @param height  高
         */
        public static void createQRCode(String content, String path, int width, int height) throws WriterException, IOException {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            //toPath() 方法由 jdk1.7 及以上提供
            MatrixToImageWriter.writeToPath(bitMatrix, format, new File(path).toPath());
        }
    }
    
    • 使用 SpringMVC 动态生成二维码
    @RequestMapping(value = "/qrcode")
    public void qrcode(String content, @RequestParam(defaultValue = "300", required = false) int width,@RequestParam(defaultValue = "300", required = false) int height, HttpServletResponse response) {
        ServletOutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            QRCodeUtil.writeToStream(content, outputStream, width, height);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

推荐阅读更多精彩内容

  • 1、二维码的生成 http://www.cnblogs.com/jtmjx/archive/2012/06/18/...
    行走的小明阅读 652评论 0 0
  • 通过 生成二维码之 Java (Google zxing) 篇 我们可以实现简单二维码的生成, 但是二维码显示却过...
    jnil阅读 2,137评论 1 5
  • 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,...
    AiPuff阅读 427评论 0 1
  • 生成带用户图片的二维码,代码如下: package Fuck; import java.awt.Color; im...
    Easy的幸福阅读 237评论 0 0
  • 在现在的网站开发中,难免会遇到要生成二维码的情况,比如要使用网页版的微信支付什么的.这里笔者分享一个java生成二...
    MacSam阅读 7,594评论 0 12