步骤

  1. 下载jar包(QRCode.jar)
  2. maven项目手动引入jar包
  3. 编写实体类实现二维码的生成
  4. 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 生成二维码的更多相关文章

  1. 利用JAVA生成二维码

    本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...

  2. 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- ...

  3. java 生成二维码后叠加LOGO并转换成base64

      1.代码 见文末推荐 2.测试 测试1:生成base64码 public static void main(String[] args) throws Exception { String dat ...

  4. java生成二维码打印到浏览器

    java生成二维码打印到浏览器   解决方法: pom.xml的依赖两个jar包: <!-- https://mvnrepository.com/artifact/com.google.zxin ...

  5. 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...

    版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任. https://blog.csdn.net/lidew521/article/details/244418 ...

  6. java生成二维码(需导入第三方ZXing.jar包)

    //这个类是用来解析,通过图片解析该图片的网页链接是什么 package util; import java.awt.Graphics2D;import java.awt.geom.AffineTra ...

  7. JAVA生成二维码图片代码

    首先需要导入 QRCode.jar 包 下载地址看这里   http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt. ...

  8. java生成二维码图片

    1.POM文件引入 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core& ...

  9. java生成二维码的三个工具

    1.  使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode ...

  10. java生成二维码(带logo)

    之前写过一篇不带logo的二维码实现方式,採用QRCode和ZXing两种方式 http://blog.csdn.net/xiaokui_wingfly/article/details/3947618 ...

随机推荐

  1. 数据库的事务与ACID

    一.事务: 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 二 ...

  2. react native与原生的交互

    一.交互依赖的重要组件 react native 中如果想要调用ios  中相关的方法,必须依赖一个重要的组件nativemodules import { NativeModules } from ' ...

  3. Spring Boot2.0之 整合Redis集群

    项目目录结构: pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  4. php连接数据库步骤

    第一步:连接数据库 $link=@mysql_connect('localhost','root','root') or die('数据库连接失败!'); echo '连接成功!'; 这里数据库连接函 ...

  5. IOS中延时执行方式

    本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...

  6. Android中的Handler,以及用Handler延迟执行

    项目中遇到一个情况,先生成文件再上传:但有时候发出指令后上传会不成功,需要再发一次指令方能上传. 猜想是由于文件还没生成就执行「上传」指令了.想到要延时.Android中单纯用currentThrea ...

  7. BZOJ_2253_[2010 Beijing wc]纸箱堆叠 _CDQ分治+树状数组

    BZOJ_2253_[2010 Beijing wc]纸箱堆叠 _CDQ分治+树状数组 Description P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n p a , , 之后, ...

  8. DP专辑之线性DP

    POJ1390 题目链接:http://poj.org/problem?id=1390 分类:记忆化搜索 dp[i][j][k] 表示,从i到j块且j后面有k块与第j块的颜色一样.dp[l][r][k ...

  9. 【BZOJ 3223】 文艺平衡树

    [题目链接] 点击打开链接 [算法] 本题是splay区间操作的模板题 我们每个点的权值设为”当前在序列中的排名“,根据二叉排序树的性质,这棵树的中序遍历就是当前序列 如果我们要获得一段区间[l,r] ...

  10. Ruby: Print WIN32OLE method names in Ruby

    class WIN32OLE   def list_ole_methods     method_names = ole_methods.collect {|m| m.name}     puts m ...