利用Java生成带有文字的二维码
程序员文章站
2024-03-12 15:07:56
介绍
主要使用了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); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。