public class ZXingCode { /** * 颜色 */ private static final int QRCOLOR = 0xFF000000; /** * 背景颜色 */ private static final int BGWHITE = 0xFFFFFFFF; /** * 存放路径 */ private static final String CODEPATH = "..\\..\\codeImage\\"; public static void main(String[] args) { try { System.out.println(System.currentTimeMillis()); getQRCode("fe212ac018f4711811", "300-欧阳峰子"); System.out.println(System.currentTimeMillis()); System.out.println("生成ok"); } catch (Exception e) { e.printStackTrace(); } } public static String getQRCode(String data, String belowText) { try { ZXingCode zp = new ZXingCode(); BufferedImage bim = zp.getQR_CODEBufferedImage(data, BarcodeFormat.QR_CODE, 230, 210, zp.getDecodeHintType()); //字节数组 return zp.addText_QRCode(bim, belowText); } catch (Exception e) { e.printStackTrace(); } return null; } /** * @param bim 图片 * @param belowText 二维码下方显示文字 * @return */ public String addText_QRCode(BufferedImage bim, String belowText) { try { BufferedImage image = bim; if (belowText != null && !belowText.equals("")) { BufferedImage outImage = new BufferedImage(230, 225, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D outg = outImage.createGraphics(); outg.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null); outg.setColor(Color.BLACK); outg.setFont(new Font("宋体", Font.PLAIN, 18)); int strWidth = outg.getFontMetrics().stringWidth(belowText); outg.drawString(belowText, 100 - strWidth / 2, image.getHeight() + (outImage.getHeight() - image.getHeight()) / 2 + 5); outg.dispose(); outImage.flush(); image = outImage; } ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.flush(); ImageIO.write(image, "jpg", baos); BufferedImage newBufferedImage = new BufferedImage( image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); newBufferedImage.createGraphics().drawImage(image, 0, 0, Color.WHITE, null); File filePath = new File(CODEPATH); ZXingCode.judeDirExists(filePath); ImageIO.write(newBufferedImage, "jpg", new File(CODEPATH + "SZ-" + System.currentTimeMillis() + "code.jpg")); //图片写到字节数组中 String imageBase64QRCode = Base64.byteArrayToBase64(baos.toByteArray()); baos.close(); image.flush(); return imageBase64QRCode; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 绘制二维码 * * @param content 扫描内容 * @param barcodeFormat 格式 * @param width * @param height * @param hints 二维码属性设置 * @return 二维码图片 */ public BufferedImage getQR_CODEBufferedImage(String content, BarcodeFormat barcodeFormat, int width, int height, Map<EncodeHintType, ?> hints) { MultiFormatWriter multiFormatWriter = null; BitMatrix bm = null; BufferedImage image = null; try { multiFormatWriter = new MultiFormatWriter(); bm = multiFormatWriter.encode(content, barcodeFormat, width, height, hints); int w = bm.getWidth(); int h = bm.getHeight(); image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { image.setRGB(x, y, bm.get(x, y) ? QRCOLOR : BGWHITE); } } } catch (WriterException e) { e.printStackTrace(); } return image; } /** * 设置二维码属性 * * @return */ public Map<EncodeHintType, Object> getDecodeHintType() { Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>(); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.MARGIN, 0); hints.put(EncodeHintType.MAX_SIZE, 350); hints.put(EncodeHintType.MIN_SIZE, 100); return hints; } /** * 判断文件夹是否存在 * * @param file */ public static void judeDirExists(File file) { if (file.exists()) { if (file.isDirectory()) { } else { } } else { file.mkdir(); } } }