java 生成二维码 QRCode、zxing 两种方式

您所在的位置:网站首页 java生成二维码带图片 java 生成二维码 QRCode、zxing 两种方式

java 生成二维码 QRCode、zxing 两种方式

2024-07-02 23:07| 来源: 网络整理| 查看: 265

java 生成二维码 QRCode、zxing 两种方式

所需要的 jar 包下载地址:java生成二维码所需要的QRCode、zxing Jar包

如果你的是Maven工程,添加依赖包的方式请参考:将 jar 包加入到 Maven 库

如果是普通Java工程,参考:Java项目如何添加第三方 jar 包引用

生成的二维码:

QRCode 方式:

package com.wanyu.frame.util; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import com.swetake.util.Qrcode; /** * 二维码工具类 * 实现输入字符串(文本,网址)生成对应的二维码二维码实质是01代码,具有4个等级的容错能力 * QRCodeUtils * @author lipw * @date 2018年8月1日下午4:52:01 */ public class QRCodeUtils { /** * 二维码可包含的内容 * EncodeMode * @author lipw * @date 2018年8月1日下午4:47:15 */ public class EncodeMode{ /** * N代表的是数字 */ public final static char N = 'N'; /** * A代表的是a-z */ public final static char A= 'A'; /** * B代表的是其他字符 */ public final static char B = 'B'; } /** * 二维码的容错能力等级 * 二维码容错率用字母表示,容错能力等级分为:L、M、Q、H四级 * 二维码具有容错功能,当二维码图片被遮挡一部分后,仍可以扫描出来。 * 容错的原理是二维码在编码过程中进行了冗余,就像是123被编码成123123,这样只要扫描到一部分二维码图片, * 二维码内容还是可以被全部读到。 * 二维码容错率即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力。容错率越高,则二维码图片能被遮挡的部分越多。 * ErrorCorrect * @author lipw * @date 2018年8月1日下午4:49:17 */ public class ErrorCorrect{ /** * 低,最大 7% 的错误能够被纠正 */ public final static char L = 'L'; /** * 中,最大 15% 的错误能够被纠正 */ public final static char M = 'M'; /** * 中上,最大 25% 的错误能够被纠正 */ public final static char Q = 'Q'; /** * 高,最大 30% 的错误能够被纠正 */ public final static char H = 'H'; } /** * 基于 QRCode 创建二维码 * @author lipw * @date 2018年8月2日上午10:21:57 * @param content 要写入二维码的内容 * @param savePath 完整的保存路径 * @param version 版本 * @param logoPath 完整的logo路径,可以为:null * @return */ public static boolean CreateQRCode(String content, String savePath, int version, String logoPath){ // 创建生成二维码的对象 Qrcode qrcode = new Qrcode(); // 设置二维码的容错能力等级 qrcode.setQrcodeErrorCorrect(ErrorCorrect.M); // N代表的是数字,A代表的是a-z,B代表的是其他字符 qrcode.setQrcodeEncodeMode(EncodeMode.B); // 版本 qrcode.setQrcodeVersion(version); // 设置验证码的大小 int width = 67 + 12 * (version - 1); int height = 67 + 12 * (version - 1); // 定义缓冲区图片 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 设置画图工具 Graphics2D gs = bufferedImage.createGraphics(); // 设置二维码背景颜色 gs.setBackground(Color.white);//lightGray // 设置颜色 gs.setColor(Color.black);//cyan,green,red,black,pink // 清除画板内容 gs.clearRect(0, 0, width, height); // 定义偏移量 int pixoff = 2; // 填充的内容转化为字节数 byte[] ctt; try { ctt = content.getBytes("utf-8"); // 设置编码方式 if (ctt.length > 0 && ctt.length < 120) { boolean[][] s = qrcode.calQrcode(ctt); 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); } } } } /* 判断是否需要添加logo图片 */ if(logoPath != null){ File icon = new File(logoPath); if(icon.exists()){ int width_4 = width / 4; int width_8 = width_4 / 2; int height_4 = height / 4; int height_8 = height_4 / 2; Image img = ImageIO.read(icon); gs.drawImage(img, width_4 + width_8, height_4 + height_8,width_4,height_4, null); }else{ System.out.println("Error: login图片不存在!"); } } // 结束写入 gs.dispose(); // 结束内存图片 bufferedImage.flush(); // 保存生成的二维码图片 ImageIO.write(bufferedImage, "png", new File(savePath)); return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public static void main(String[] args) { String content = "http://www.wei-xiao.top/"; String savePath = "/Users/aven/Desktop/qrcode.png"; int version = 9; String logoPath = "/Users/aven/Desktop/logo.png"; boolean result = CreateQRCode(content, savePath, version, logoPath); if (result){ System.out.println("\n二维码图片生成成功!"); }else{ System.out.println("\n二维码图片生成失败!"); } } }

说明:二维码中间加一个 Logo 的方式是很简单粗暴的,就是利用二维码的容错能力,直接在生成好的二维码图片上覆盖一张图片上去。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3