今天在公司,完成了之前的任务,没有什么事做,就想鼓捣一下二维码,因为之前没有接触过,我就去翻看了几本书,也基本完成了二维码的实现,以及添加二维码的LOGO。
现在绘制二维码一般都使用的是谷歌的zxing的一个核心包,链接:https://pan.baidu.com/s/1eSB5tlg 密码:e7eg
好了,不多说了,直接上代码!
首先是我们一个工具类的编写,用于生成二维码,和添加LOGO
1 package com.warrenwell.Test; 2 3 import java.awt.Graphics; 4 import java.awt.Image; 5 import java.awt.image.BufferedImage; 6 import java.io.File; 7 import java.io.IOException; 8 9 import javax.imageio.ImageIO; 10 11 import com.google.zxing.common.BitMatrix; 12 13 public final class MatrixWriteToImage { 14 private static final int BLACK=0XFF000000; 15 private static final int WHITE=0XFFFFFFFF; 16 private MatrixWriteToImage(){ 17 18 } 19 public static BufferedImage toBufferedImage(BitMatrix matrix){ 20 BufferedImage bi=new BufferedImage(matrix.getWidth(), matrix.getHeight(), BufferedImage.TYPE_INT_RGB); 21 for(int i=0;i<matrix.getWidth();i++){ 22 for(int j=0;j<matrix.getHeight();j++){ 23 //有值的是黑色,没有值是白色 24 bi.setRGB(i, j,matrix.get(i, j)?BLACK:WHITE); 25 } 26 } 27 return bi; 28 } 29 public static void MatrixToImage(BitMatrix matrix,String format,File f) throws IOException{ 30 //将我们的logo提取出来,建议这里单独写一个方法,我只是为了方便 31 BufferedImage b=ImageIO.read(new File("e:/1.jpg")); 32 //将logo弄成70*70,如果想大点,记得要提高我们二维码的容错率 33 Image image=b.getScaledInstance(70, 70,Image.SCALE_FAST); 34 BufferedImage bi=toBufferedImage(matrix); 35 //获取二维码画刷 36 Graphics g=bi.getGraphics(); 37 //定位 38 g.drawImage(image ,250,150,null); 39 //二维码画到相应文件位置,结束。 40 if(ImageIO.write(bi, format, f)){ 41 42 } 43 System.out.println("成功!"); 44 } 45 }
之后就在我们的主要的函数中进行调用:
1 package com.warrenwell.Test; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.util.HashMap; 6 7 import com.google.zxing.BarcodeFormat; 8 import com.google.zxing.EncodeHintType; 9 import com.google.zxing.MultiFormatWriter; 10 import com.google.zxing.WriterException; 11 import com.google.zxing.common.BitMatrix; 12 13 public class ErweiMa { 14 public static void main(String[] args) throws WriterException, IOException { 15 MultiFormatWriter mulwriter=new MultiFormatWriter(); 16 //写入二维码的内容,也可以是链接,xml,json字符串 17 String content="qwqwQAQ"; 18 //对EncodeHintType的各种设置写入一个map中 19 HashMap<EncodeHintType, Object> hints=new HashMap<>(); 20 //设置我们放入的字符串编码为utf-8 21 hints.put(EncodeHintType.CHARACTER_SET,"utf-8"); 22 //长宽,二维码为QR码 23 BitMatrix bitmatrix=mulwriter.encode(content,BarcodeFormat.QR_CODE, 400,400,hints); 24 //调用MatrixWriteToImage的方法 25 MatrixWriteToImage.MatrixToImage(bitmatrix,"png",new File("f:/1.png")); 26 } 27 }
最后我们的二维码就会在我们的F盘中出现了,大家可以也去试试呢。
关于修改我们的二维码的容错率也是通过写入我们的Line19的hashmap中进行修改,只需要添加一行,将我们的容错率级别提高,那么你的LOGO就可以大一点了。
1 hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.H);
本人在苏州做软件开发一年多,希望能够和大家一起学习,计算机一直是我的兴趣爱好,这是我第一篇博客,是今天无聊的一时兴起,不过也会坚持下去。