前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java生成二维码

Java生成二维码

作者头像
JAVA葵花宝典
发布2019-05-24 20:40:28
9040
发布2019-05-24 20:40:28
举报
文章被收录于专栏:JAVA葵花宝典JAVA葵花宝典

作者:许你一世流离 原文:https://blog.csdn.net/weixin_39936341/article/details/82910051

1,下载jar包(QRCode.jar)

maven依赖

代码语言:javascript
复制
<dependency>   <groupId>QRCode</groupId>   <artifactId>QRCode</artifactId>   <version>3.0</version></dependency>

2,编写实体类实现二维码的生成

二维码工具类

代码语言:javascript
复制
public class CreateQRCode {
    /**     * 创建二维码     * @param qrData 生成二维码中要存储的信息     * @param path   二维码图片存储路径 eg:"D:/qrcode.png"     * @throws Exception     */    public static boolean creatQrcode(String qrData, String path) {        try {            Qrcode qrcode = new Qrcode();            qrcode.setQrcodeErrorCorrect('M');//纠错等级(分为L、M、H三个等级)            qrcode.setQrcodeEncodeMode('B');//N代表数字,A代表a-Z,B代表其它字符            qrcode.setQrcodeVersion(7);//版本
            //设置一下二维码的像素            int width = 67 + 12 * (7 - 1);            int height = 67 + 12 * (7 - 1);            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);            //绘图            Graphics2D gs = bufferedImage.createGraphics();            gs.setBackground(Color.WHITE);            gs.setColor(Color.BLACK);            gs.clearRect(0, 0, width, height);//清除下画板内容
            //设置下偏移量,如果不加偏移量,有时会导致出错。            int pixoff = 2;
            byte[] d = qrData.getBytes("utf-8");            if (d.length > 0 && d.length < 120) {                boolean[][] s = qrcode.calQrcode(d);                for (int i = 0; i < s.length; i++) {                    for (int j = 0; j < s.length; j++) {                        if (s[j][i]) {                            gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);                        }                    }                }            }            gs.dispose();            bufferedImage.flush();            ImageIO.write(bufferedImage, "png", new File(path));            return true;        } catch (IOException e) {            e.printStackTrace();            return false;        }    }
    /**     * 解析二维码(QRCode)     *     * @param imgPath 图片路径     * @return     */    public static String decoderQRCode(String imgPath) {        //QRCode 二维码图片的文件        File imageFile = new File(imgPath);        BufferedImage bufImg = null;        String content = null;        try {            bufImg = ImageIO.read(imageFile);            QRCodeDecoder decoder = new QRCodeDecoder();            content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");        } catch (IOException e) {            System.out.println("Error: " + e.getMessage());            e.printStackTrace();        } catch (DecodingFailedException dfe) {            System.out.println("Error: " + dfe.getMessage());            dfe.printStackTrace();        }        return content;    }
}

二维码基础类

代码语言:javascript
复制
class TwoDimensionCodeImage implements QRCodeImage {    //BufferedImage作用将一幅图片加载到内存中    BufferedImage bufImg;    public TwoDimensionCodeImage(BufferedImage bufImg) {        this.bufImg = bufImg;    }
    @Override    public int getWidth() {        return bufImg.getWidth();//返回像素宽度    }
    @Override    public int getHeight() {        return bufImg.getHeight();//返回像素高度    }
    @Override    public int getPixel(int i, int i1) {        return bufImg.getRGB(i, i1);//得到长宽值,即像素值,i,i1代表像素值    }}

3.controller调用

代码语言:javascript
复制
package com.st.project.controller;
import com.st.project.common.AjaxResult;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import static com.st.project.common.CreateQRCode.creatQrcode;import static com.st.project.common.CreateQRCode.decoderQRCode;
/** * 创建二维码 */@Controller@RequestMapping("/qrcode")public class QrcodeController {    @Value("${portals.upload.image.path}")    private String qrcodePath; //二维码存储路径
    /**     * 创建二维码     * @return     */    @ResponseBody    @PostMapping("/add.dd")    public AjaxResult addQrcode(HttpServletRequest request){        AjaxResult ajaxResult = new AjaxResult();        ajaxResult.setState(false);        String qrData=request.getParameter("qrData");        String qrSuffix=request.getParameter("qrSuffix");        String qrcode=System.currentTimeMillis()+"."+qrSuffix;        String path=qrcodePath+qrcode;        boolean getQrcode=creatQrcode(qrData,path);        if(getQrcode==true){            ajaxResult.setState(true);            ajaxResult.setData(qrcode);        }        return ajaxResult;    }
    /**     * 解析二维码     * @return     */    @ResponseBody    @PostMapping("/decoder.dd")    public AjaxResult decoderQrcode(HttpServletRequest request){        AjaxResult ajaxResult = new AjaxResult();        ajaxResult.setState(false);        String qrcode=request.getParameter("qrcode");
        String qrData=decoderQRCode(qrcodePath+qrcode);        if(qrData!=null && !"".equals(qrData)){            ajaxResult.setState(true);            ajaxResult.setData(qrData);        }        return ajaxResult;    }
}

此时已生成一张名为qrcode.png的二维码图片:

往期精彩回顾(都有答案)

了解一下Spring中用了哪些设计模式?这样回答面试官才稳

dubbo 面试18问

拜托!面试请不要再问我Spring Cloud底层原理

稳了!Java并发编程71道面试题及答案

【附答案】Java面试2019常考题目汇总(一)

这10道springboot常见面试题你需要了解下

JVM面试题 巧用这19条MySQL优化,效率至少提高3倍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA葵花宝典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,下载jar包(QRCode.jar)
    • maven依赖
      • 二维码工具类
      • 二维码基础类
  • 2,编写实体类实现二维码的生成
  • 3.controller调用
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档