时间:2021-05-20
使用开源的一维/二维码图形处理库zxing GitHub地址
引入依赖
<!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version></dependency><!-- https://mvnrepository.com/artifact/com.google.zxing/javase --><dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.0</version></dependency>封装工具类
package com.app.utils; import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.Map; import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.client.j2se.MatrixToImageConfig;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; /** * @title 生成二维码工具类 * @author zch * @discribtion * @Date 2020年1月3日 下午4:26:05 * @vision V1.0 */public class QRCodeUtil{ private static final int width = 200; // 图像宽度 private static final int height = 200; // 图像高度 private static final int ON_COLOR = 0xFF000001; private static final int OFF_COLOR = 0xFFFFFFFF; /** * @title 生成二维码图片 * @discribtion * @author zch * @Date 2020年1月3日 下午3:27:21 * @param width 二维码宽度,默认为200 * @param height 二维码高度,默认为200 * @param content 二维码内容,必填 * @param logoPath logo图片路径,若为空则生成不带logo的二维码 * @param imgPath 生成二维码文件夹路径 * @param imgName 生成二维码图片名称,必填 * @param suffix 生成二维码图片后缀类型,例如:gif,必填 * @vision V1.0 */ public static boolean generateQRImage(Integer width, Integer height, String content, String logoPath, String imgPath, String imgName, String suffix) { if (content == null || imgName == null || suffix == null) { return false; } try { width = width == null ? QRCodeUtil.width : width; height = height == null ? QRCodeUtil.height : height; if (logoPath != null && !"".equals(logoPath.trim())) { QREncode(width, height, content, logoPath, imgPath, imgName, suffix); } else { QREncode(width, height, content, imgPath, imgName, suffix); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * @title 生成二维码 * @discribtion * @author zch * @Date 2020年1月3日 下午3:27:21 * @vision V1.0 */ private static void QREncode(int width, int height, String content, String imgPath, String imgName, String suffix) throws Exception { File filePath = new File(imgPath); if (!filePath.exists()) { filePath.mkdirs(); } File imageFile = new File(imgPath, imgName); Map<EncodeHintType, Object> hints = new HashMap<>(); // 内容编码格式 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定纠错等级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 设置二维码边的空度,非负数 hints.put(EncodeHintType.MARGIN, 1); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); MatrixToImageWriter.writeToPath(bitMatrix, suffix, imageFile.toPath());// 输出原图片 } /** * @title 生成带logo的二维码 * @discribtion * @author zch * @Date 2020年1月3日 下午3:27:21 * @vision V1.0 */ private static void QREncode(int width, int height, String content, String logoPath, String imgPath, String imgName, String suffix) throws Exception { File filePath = new File(imgPath); if (!filePath.exists()) { filePath.mkdirs(); } File imageFile = new File(imgPath, imgName); Map<EncodeHintType, Object> hints = new HashMap<>(); // 内容编码格式 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定纠错等级 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 设置二维码边的空度,非负数 hints.put(EncodeHintType.MARGIN, 1); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(ON_COLOR, OFF_COLOR); BufferedImage bufferedImage = LogoMatrix(MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig), new File(logoPath)); ImageIO.write(bufferedImage, suffix, imageFile);// 输出带logo图片 } /** * @title 二维码图片添加logo * @discribtion * @author zch * @Date 2020年1月3日 下午3:27:21 * @param matrixImage 源二维码图片 * @param logoFile logo图片 * @vision V1.0 */ private static BufferedImage LogoMatrix(BufferedImage matrixImage, File logoFile) throws IOException { // 读取二维码图片,并构建绘图对象 Graphics2D gs = matrixImage.createGraphics(); int matrixWidth = matrixImage.getWidth(); int matrixHeigh = matrixImage.getHeight(); int ratioWidth = matrixWidth * 2 / 10; int ratioHeight = matrixHeigh * 2 / 10; // 读取Logo图片 BufferedImage logo = ImageIO.read(logoFile); int logoWidth = logo.getWidth(null) > ratioWidth ? ratioWidth : logo.getWidth(null); int logoHeight = logo.getHeight(null) > ratioHeight ? ratioHeight : logo.getHeight(null); int x = (matrixWidth - logoWidth) / 2; int y = (matrixHeigh - logoHeight) / 2; // 绘制 gs.drawImage(logo, x, y, logoWidth, logoHeight, null); gs.setColor(Color.BLACK); gs.setBackground(Color.WHITE); gs.dispose(); matrixImage.flush(); return matrixImage; }}测试生成二维码
QRCodeUtil.generateQRImage(null, null, "https://blog.csdn.net/qq_34928194", null, "E:/", "test.gif", "gif");以上就是Java生成二维码的实例代码的详细内容,更多关于Java生成二维码的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
复制代码代码如下://////生成二维码//////生成二维码路径///生成的内容///二维码宽///二维码高///需生成的Logo图片///privateBi
本文实例讲述了Java实现的生成二维码和解析二维码URL操作。分享给大家供大家参考,具体如下:二维码依赖jar包,zxingcom.google.zxingja
本文实例讲述了PHP生成二维码与识别二维码的方法。分享给大家供大家参考,具体如下:二维码的分类线性堆叠式二维码矩阵式二维码二维码的优缺点优点信息容量大编码范围广
Zxing是Google提供的关于条码(一维码、二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码
以前只用过jQuery.qrcode生成过二维码,这次使用的是Google的zxing通过Java代码生成二维码并以流的方式输出到前台页面所需jar包:zxin