zoukankan      html  css  js  c++  java
  • 关于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);

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

  • 相关阅读:
    cocos2d多语言互调之一---lua调java
    vue 组件
    封装 XMLHttpRequest
    Ajax 请求
    jq 显示和隐藏 计时器
    jq 动画DOM及其操作
    jq 表单提交
    jq 事件绑定
    js 一些实用的封装和兼容
    工厂、原型、混合模式
  • 原文地址:https://www.cnblogs.com/qwqwQAQ/p/8118109.html
Copyright © 2011-2022 走看看