Java生成二维码的实例代码

网友投稿 285 2022-11-23


Java生成二维码的实例代码

使用开源的一维/二维码图形处理库zxing github地址

引入依赖

com.google.zxing

core

3.3.0

com.google.zxing

javase

3.3.0

封装工具类

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 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 nMQdOMultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);

MatrixToImageWriter.writeToPath(bitMatrix, suffix, imageFile.toPath());// 输出原图片

}

/**

* @title 生成带logo的二维码

* @discribtion

* @author zch

* nMQdO@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 hints = new HashMap<>();

// 内容编码格式

hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

// 指定纠错等级

hinthttp://s.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生成二维码的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用java8的方法引用替换硬编码的示例代码
下一篇:SpringCloud Feign如何在远程调用中传输文件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~