1.pom引用:
<!-- 条形码工具类 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
2.代码:
package com.f.common.util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
import org.apache.commons.lang3.StringUtils;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @Description 谷歌条形码生成工具类
* @Author FangYN
* @Date 2020/6/9
**/
public class GoogleBarCodeUtils {
// 条形码宽度
private static final int WIDTH = 300;
// 条形码高度
private static final int HEIGHT = 50;
// 加文字 条形码
private static final int WORD_HEIGHT = 75;
// 设置 条形码参数
private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
private static final long serialVersionUID = 1L;
{
put(EncodeHintType.CHARACTER_SET, "utf-8");// 设置编码方式
}
};
/**
* @param vaNumber VA 码
* @return 返回BufferedImage 生成 图片缓冲
*/
public static BufferedImage getBarCode(String vaNumber) {
try {
Code128Writer writer = new Code128Writer();
// 编码内容, 编码类型, 宽度, 高度, 设置参数
BitMatrix bitMatrix = writer.encode(vaNumber, BarcodeFormat.CODE_128, WIDTH, HEIGHT, hints);
return MatrixToImageWriter.toBufferedImage(bitMatrix);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
/**
* @param image 条形码图片
* @param words 文字
* @return 返回BufferedImage 在带logo的二维码下面加上文字
*/
public static BufferedImage insertWords(BufferedImage image, String words) {
// 新的图片,把带logo的二维码下面加上文字
if (StringUtils.isNotEmpty(words)) {
BufferedImage outImage = new BufferedImage(WIDTH, WORD_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = outImage.createGraphics();
// 抗锯齿
setGraphics2D(g2d);
// 设置白色
setColorWhite(g2d);
// 画条形码到新的面板
g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
// 画文字到新的面板
Color color = new Color(0, 0, 0);
g2d.setColor(color);
// 字体、字型、字号
g2d.setFont(new Font("微软雅黑", Font.PLAIN, 18));
//文字长度
int strWidth = g2d.getFontMetrics().stringWidth(words);
//总长度减去文字长度的一半 (居中显示)
int wordStartX = (WIDTH - strWidth) / 2;
//height + (outImage.getHeight() - height) / 2 + 12
int wordStartY = HEIGHT + 20;
// 画文字
g2d.drawString(words, wordStartX, wordStartY);
g2d.dispose();
outImage.flush();
return outImage;
}
return null;
}
/**
* 设置 Graphics2D 属性 (抗锯齿)
*
* @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制
*/
private static void setGraphics2D(Graphics2D g2d) {
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
g2d.setStroke(s);
}
/**
* 设置背景为白色
*
* @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制
*/
private static void setColorWhite(Graphics2D g2d) {
g2d.setColor(Color.WHITE);
//填充整个屏幕
g2d.fillRect(0, 0, 600, 600);
//设置笔刷
g2d.setColor(Color.BLACK);
}
public static void main(String[] args) throws IOException {
BufferedImage image = insertWords(getBarCode("A80/90R8A8A"), "A80/90R8A(test)");
ImageIO.write(image, "jpg", new File("E:/Images/barcode.png"));
// HttpServletResponse response;
// response.setHeader("Cache-Control", "no-store, no-cache");
// response.setContentType("image/jpeg");
// ImageIO.write(image, "jpeg", response.getOutputStream());
}
}
参考:
https://blog.csdn.net/fangyana/article/details/106635364
版权声明:本文为qq_40321119原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。