美文网首页
生成二维码之 Java (Google zxing) 篇

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

作者: jnil | 来源:发表于2016-11-09 22:55 被阅读0次
  • 参考资料

  • 项目环境

    • 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();
                }
            }
        }
    }
    

相关文章

网友评论

      本文标题:生成二维码之 Java (Google zxing) 篇

      本文链接:https://www.haomeiwen.com/subject/momtpttx.html