Loading

关于JAVA实现二维码以及添加二维码LOGO

今天在公司,完成了之前的任务,没有什么事做,就想鼓捣一下二维码,因为之前没有接触过,我就去翻看了几本书,也基本完成了二维码的实现,以及添加二维码的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);

本人在苏州做软件开发一年多,希望能够和大家一起学习,计算机一直是我的兴趣爱好,这是我第一篇博客,是今天无聊的一时兴起,不过也会坚持下去。

 

posted @ 2017-12-26 15:14  BruceNeter  阅读(2072)  评论(1编辑  收藏  举报