欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用Java生成带有文字的二维码

程序员文章站 2024-03-13 11:31:33
介绍 主要使用了goole的zxing包,下面给出了示例代码,很方便大家的理解和学习,代码都属于初步框架,功能有了,需要根据实际使用情况完善优化。 第一步、maven导...

介绍

主要使用了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);
 }
}

第三步、把文字写入二维码图片中:

/**
 * 给二维码图片加上文字
 * @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");
}

第四步、在main方法中测试一下,一个中间带文字的二维码就生成了

public static void main(string[] args) throws exception {
 file qrcfile = new file("/users/deweixu/","google.jpg");
 writetofile("www.google.com.hk", "jpg", qrcfile);
 presstext("谷歌", qrcfile, 5, color.red, 32);
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。