zoukankan      html  css  js  c++  java
  • 使用Google zxing生成二维码

    添加Maven依赖

            <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>core</artifactId>
                <version>3.2.1</version>
            </dependency>
            <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>javase</artifactId>
                <version>3.2.1</version>
            </dependency>
    

    程序代码

    
    /**
     * 二维码工具类
     * @Author kzh
     * @Description
     * @Date 19-4-1 下午4:50
     */
    public class QrCodeUtils {
    
        private static final Logger log = LoggerFactory.getLogger(QrCodeUtils.class);
    
        /**
         * 创建二维码
         * @param content 二维码封装内容
         * @param logo 中心logo(未支持)
         * @param weight 宽度
         * @param height 高度
         * @return
         */
        public static BufferedImage createImage(String content, String logo, Integer weight, Integer height) {
    
            /**
             * 1、如果高度和宽度都有指定,使用指定的高宽
             * 2、如果高宽都未指定,使用默认的高宽300x300
             * 3、只指定了高宽中的一个,则高宽相等
             */
            if(weight != null && height != null) {
    
            }else if(weight == null && height == null) {
                weight = 300;
                height = 300;
            }else {
                weight = (weight == null ? height : weight);
                height = (height == null ? weight : height);
            }
            // 相关设置
            HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
            // L(7%) M(15%) Q(25%) H(30%)
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
            // 二维码边界空白大小1,2,3,4,默认4,最大
            hints.put(EncodeHintType.MARGIN, 1);
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    
            try {
                QRCodeWriter writer = new QRCodeWriter();
                BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, weight, height, hints);
                BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
                return image;
    
            } catch (WriterException e) {
                log.error("生成二维码失败, 错误信息:{}", JSON.toJSONString(e));
                throw new RuntimeException("生成二维码失败");
            }
        }
    
        /**
         * 输出二维码到流中
         * 在本项目中输出到流中会出现换行,导致输出乱码,原因不详,建议使用base64输出形式{@link QrCodeUtils#writeToBase64(java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer)}
         * @param content
         * @param logo
         * @param stream
         * @param weight
         * @param height
         */
        public static void writeToStream(String content, String logo, OutputStream stream, Integer weight, Integer height) {
            try {
                BufferedImage image = createImage(content, logo, weight, height);
                // 输出图片为png格式
                ImageIO.write(image, "png", stream);
            } catch (IOException e) {
                log.error("生成二维码失败, 写入二维码到流失败,错误信息:{}", JSON.toJSONString(e));
                throw new RuntimeException( "生成二维码失败");
            }
        }
    
        /**
         * 以base64形式输出二维码
         * @param content
         * @param logo
         * @param weight
         * @param height
         * @return
         */
        public static String writeToBase64(String content, String logo, Integer weight, Integer height){
            try {
                BufferedImage image = createImage(content, logo, weight, height);
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                // 输出图片为png格式
                ImageIO.write(image, "png", bos);
                return "data:image/png;base64," + Base64.encode(bos.toByteArray());
            } catch (IOException e) {
                log.error("生成二维码失败, 二维码转base64失败,错误信息:{}", JSON.toJSONString(e));
                throw new RuntimeException("生成二维码失败");
            }
        }
    }
    
    
    
  • 相关阅读:
    Qual IPE中的Crop计算
    TinyCC安装
    C编译器(TCC)
    Macros之PRId64
    shell脚本学习 (10) 从结构化文本提取数据
    shell脚本学习 (9) 提取开头或结尾的几行
    shell脚本学习 (8) fmt 格式化段落
    接触python的第2天:了解变量和打印
    接触python的第1天:测试hello world
    shell脚本学习(7)sort
  • 原文地址:https://www.cnblogs.com/QullLee/p/10682746.html
Copyright © 2011-2022 走看看