package com.dy.common.util;
|
|
import com.google.zxing.BarcodeFormat;
|
import com.google.zxing.EncodeHintType;
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
import com.google.zxing.common.BitMatrix;
|
import com.google.zxing.qrcode.QRCodeWriter;
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
|
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;
|
|
public class QrCodeTest2 {
|
|
public static void main(String[] args) throws Exception {
|
String imgpath = "D:\\demo\\";
|
createq("1002001", "确定" , imgpath + "test2.jpg");
|
}
|
|
private static void createq(String code, String name, String imgpath) throws Exception{
|
//二维码大小
|
int size = 300;
|
|
//设置二维码参数
|
Map hints = new HashMap();
|
//设置UTF-8, 防止中文乱码
|
hints .put(EncodeHintType.CHARACTER_SET, "UTF-8");
|
// 设置二维码的容错性
|
hints .put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
|
//留白 默认4
|
hints .put(EncodeHintType.MARGIN, 1);
|
// 码版本,取值为 1 到 40 ,根据二维码内容决定最低版本
|
//param.put(EncodeHintType.QR_VERSION, 3);
|
//创建码位图
|
BitMatrix bitMatrix = new QRCodeWriter().encode(code, BarcodeFormat.QR_CODE, size, size, hints );
|
|
//将生成码位图转换成BufferedImage
|
BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
|
|
int fontSize = 30 ;
|
//设置画布内边距
|
int padding = 5;
|
//画布大小
|
int combinedWidth = size + padding * 2 ;
|
int combinedHeight = size + padding * 2 + fontSize;
|
|
//创建空白BufferedImage
|
BufferedImage combined = new BufferedImage(combinedWidth, combinedHeight, BufferedImage.TYPE_INT_RGB);
|
//从BufferedImage对象中获取画布(Graphics2D)对象
|
Graphics2D graphics = combined.createGraphics();
|
//设置渲染提示为启用文本抗锯齿
|
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
//默认开启绘图抗锯齿
|
//graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_DEFAULT);
|
//设置空白画布整体背景颜色
|
GraphicsUtils.drawBackground(graphics,0, 0, combinedWidth, combinedHeight,Color.WHITE);
|
|
int linepadding = padding - 1 ;
|
//绘制矩形
|
GraphicsUtils.drawRectangle(graphics, linepadding, linepadding,
|
combinedWidth - linepadding * 2,
|
combinedHeight - linepadding * 2, Color.BLACK);
|
|
//二维码插入画布
|
GraphicsUtils.drawImage(graphics, qrImage, padding, padding);
|
|
//绘制头部字体
|
Font titleFont = new Font("宋体", Font.BOLD, fontSize);
|
GraphicsUtils.drawFont(graphics,titleFont,Color.BLUE);
|
FontMetrics fontMetrics = graphics.getFontMetrics();
|
int fontWidth = fontMetrics.stringWidth(name);
|
int xName = ((combinedWidth - fontWidth) / 2);
|
int yName = combinedHeight - padding - fontSize/2 ;
|
// int yName = combinedHeight - padding - fontWidth/2 ;
|
GraphicsUtils.drawText(graphics, name, xName, yName, titleFont, Color.BLUE);
|
|
graphics.dispose();
|
|
try {
|
ImageIO.write(combined, "jpg",new File(imgpath) );
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
}
|
}
|