首頁 >Java >java教程 >利用Java產生帶有文字的二維碼

利用Java產生帶有文字的二維碼

高洛峰
高洛峰原創
2017-01-20 14:23:492577瀏覽

介紹

主要使用了goole的zxing包,下面給出了示例代碼,很方便大家的理解和學習,代碼都屬於初步框架,功能有了,需要根據實際使用情況完善優化。

第一步、maven導入zxing

<dependency>
 <groupId>com.google.zxing</groupId>
 <artifactId>core</artifactId>
 <version>3.2.1</version>
</dependency>

第二步、開始產生二維碼:

private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
/**
 * 把生成的二维码存入到图片中
 * @param matrix zxing包下的二维码类
 * @return
 */
public static BufferedImage toBufferedImage(BitMatrix matrix) {
 int width = matrix.getWidth();
 int height = matrix.getHeight();
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 for (int x = 0; x < width; x++) {
  for (int y = 0; y < height; y++) {
   image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
  }
 }
 return image;
}
/**
 * 生成二维码并写入文件
 * @param content 扫描二维码的内容
 * @param format 图片格式 jpg
 * @param file  文件
 * @throws Exception
 */
public static void writeToFile(String content, String format, File file)
  throws Exception {
 MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
 @SuppressWarnings("rawtypes")
 Map hints = new HashMap();
 //设置UTF-8, 防止中文乱码
 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
 //设置二维码四周白色区域的大小
 hints.put(EncodeHintType.MARGIN,1);
 //设置二维码的容错性
 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
 //画二维码
 BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints);
 BufferedImage image = toBufferedImage(bitMatrix);
 if (!ImageIO.write(image, format, file)) {
  throw new IOException("Could not write an image of format " + format + " to " + file);
 }
}

   

第三步、把文字寫入文字中:中寫真第四步、在main方法中測試一下,一個中間帶文字的二維碼就生成了

/**
 * 给二维码图片加上文字
 * @param pressText 文字
 * @param qrFile  二维码文件
 * @param fontStyle
 * @param color
 * @param fontSize
 */
public static void pressText(String pressText, File qrFile, int fontStyle, Color color, int fontSize) throws Exception {
 pressText = new String(pressText.getBytes(), "utf-8");
 Image src = ImageIO.read(qrFile);
 int imageW = src.getWidth(null);
 int imageH = src.getHeight(null);
 BufferedImage image = new BufferedImage(imageW, imageH, BufferedImage.TYPE_INT_RGB);
 Graphics g = image.createGraphics();
 g.drawImage(src, 0, 0, imageW, imageH, null);
 //设置画笔的颜色
 g.setColor(color);
 //设置字体
 Font font = new Font("宋体", fontStyle, fontSize);
 FontMetrics metrics = g.getFontMetrics(font);
 //文字在图片中的坐标 这里设置在中间
 int startX = (WIDTH - metrics.stringWidth(pressText)) / 2;
 int startY = HEIGHT/2;
 g.setFont(font);
 g.drawString(pressText, startX, startY);
 g.dispose();
 FileOutputStream out = new FileOutputStream(qrFile);
 ImageIO.write(image, "JPEG", out);
 out.close();
 System.out.println("image press success");
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

更多利用Java來產生帶有文字的二維碼相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn