| 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(); | 
|         } | 
|   | 
|     } | 
| } |