如何使用 Java 生成二维码
步骤
- 下载jar包(QRCode.jar)
 - maven项目手动引入jar包
 - 编写实体类实现二维码的生成
 - controller调用
 
下载jar包(QRCode.jar)
下载网址如下:
QRCode生成二维码网址:http://swetake.com/qrcode/index-e.html
maven项目手动引入jar包
<dependency>
   <groupId>QRCode</groupId>
   <artifactId>QRCode</artifactId>
   <version>3.0</version>
</dependency>
编写实体类实现二维码的生成
import com.swetake.util.Qrcode;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
 * 二维码工具类
 */
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;
    }
}
/**
 * 二维码基础类
 */
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代表像素值
    }
}
4. controller调用
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的二维码图片:
如何使用 Java 生成二维码的更多相关文章
- 利用JAVA生成二维码
		
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
 - java 生成二维码、可带LOGO、可去白边
		
1.准备工作 所需jar包: JDK 1.6: commons-codec-1.11.jar core-2.2.jar javase-2.2.jar JDK 1.7: commons-codec- ...
 - java 生成二维码后叠加LOGO并转换成base64
		
1.代码 见文末推荐 2.测试 测试1:生成base64码 public static void main(String[] args) throws Exception { String dat ...
 - java生成二维码打印到浏览器
		
java生成二维码打印到浏览器 解决方法: pom.xml的依赖两个jar包: <!-- https://mvnrepository.com/artifact/com.google.zxin ...
 - 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...
		
版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任. https://blog.csdn.net/lidew521/article/details/244418 ...
 - java生成二维码(需导入第三方ZXing.jar包)
		
//这个类是用来解析,通过图片解析该图片的网页链接是什么 package util; import java.awt.Graphics2D;import java.awt.geom.AffineTra ...
 - JAVA生成二维码图片代码
		
首先需要导入 QRCode.jar 包 下载地址看这里 http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt. ...
 - java生成二维码图片
		
1.POM文件引入 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core& ...
 - java生成二维码的三个工具
		
1. 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode ...
 - java生成二维码(带logo)
		
之前写过一篇不带logo的二维码实现方式,採用QRCode和ZXing两种方式 http://blog.csdn.net/xiaokui_wingfly/article/details/3947618 ...
 
随机推荐
- js中的width问题
			
1.在jQuery中,width()方法用于获得元素宽度: innerWidth()方法用于获得包括内边界(padding)的元素宽度, outerWidth()方法用于获得包括内边界(padding ...
 - 【摘抄】u3d|unity学习教程与方法
			
小编,因为下面这句话,还是决定,只摘链接地址(来自百度经验): http://jingyan.baidu.com/article/19192ad820f17be53e570715.html 经验内容仅 ...
 - 「LuoguP1627 / T36198」 [CQOI2009]中位数
			
Description 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. Input 第一行为两个正整数n和b,第二行为1 ...
 - 【转】Chrome调试鼠标悬停后出现的元素
			
原文地址:https://blog.csdn.net/sparrowflying/article/details/80996550 调试小技巧:调试样式的时候,有一类元素是鼠标悬停在特定位置才会出现的 ...
 - 让ubuntu16.04开机进入命令行模式
			
使用Ubuntu时,有时候我们不想开机进入桌面,想直接进入命令行,这样启动的比较快, 1.首先我们修改grub文件,改为如图所示: sudo gedit /etc/default/grub 改完之后 ...
 - leetCode :103. Binary Tree Zigzag Level Order Traversal (swift) 二叉树Z字形层次遍历
			
// 103. Binary Tree Zigzag Level Order Traversal // https://leetcode.com/problems/binary-tree-zigzag ...
 - django QQ认证登录
			
一.开发环境 django 1.10.2 python3.5.2 django-social-auth 0.3.6 二.申请QQ互联 APPID及SECRECT_KEY 大致步骤: 1.成为QQ互联开 ...
 - [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制
			
一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...
 - 张高兴的 .NET Core IoT 入门指南:(三)使用 I2C 进行通信
			
什么是 I2C 总线 I2C 总线(Inter-Integrated Circuit Bus)是设备与设备间通信方式的一种.它是一种串行通信总线,由飞利浦公司在1980年代为了让主板.嵌入式系统或手机 ...
 - css里关于浏览器的前缀
			
今天遇到一个比较坑爹的 -moz-box-sizing: border-box; box-sizing' border-box; 一下子有点懵逼,第一个什么鬼??一查,原来是火狐浏览器的前缀.应该 ...