zoukankan      html  css  js  c++  java
  • 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...

    版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任。

    https://blog.csdn.net/lidew521/article/details/24441825

    二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...

    技术qq交流群:JavaDream:251572072

    1.首先介绍一个api.
      Zxing是Google提供的关于条码
      (一维码、二维码)的解析工具,提供了二维码的生成与解析的方法,如今我简介一下使用Java利用Zxing生成与解析二维码
    2、二维码的生成
       1.1 将Zxing-core.jar 包增加到classpath下。


       1.2 二维码的生成须要借助MatrixToImageWriter类。
         该类是由Google提供的。能够将该类复制到源代码中,这里我将该类的源代码贴上。能够直接使用。
         import com.google.zxing.common.BitMatrix;
     
     import javax.imageio.ImageIO;
     import java.io.File;
     import java.io.OutputStream;
     import java.io.IOException;
     import java.awt.image.BufferedImage;
     
     
     public final class MatrixToImageWriter {
     
       private static final int BLACK = 0xFF000000;
       private static final int WHITE = 0xFFFFFFFF;
     
       private MatrixToImageWriter() {}
     
       
       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;
       }
     
       
       public static void writeToFile(BitMatrix matrix, String format, File file)
           throws IOException {
         BufferedImage image = toBufferedImage(matrix);
         if (!ImageIO.write(image, format, file)) {
           throw new IOException("Could not write an image of format " + format + " to " + file);
         }
       }
     
       
       public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
           throws IOException {
         BufferedImage image = toBufferedImage(matrix);
         if (!ImageIO.write(image, format, stream)) {
           throw new IOException("Could not write an image of format " + format);
         }
       }
     
     }
     ------------------------------------------------------------------------
     2.以下创建一个javaproject来生成名片
     ------------------------------------------
     项目结构例如以下:
     ErWerMa
    /ErWerMa/src
    credream
    credream.main
    /ErWerMa/src/credream/main/CreQcode.java
    credream.utils
    /ErWerMa/src/credream/utils/MatrixToImageWriter.java
    /ErWerMa/src/Zxing-core.jar
    -------------------------------------------------------------
    package credream.main;
    import java.io.File;
    import java.util.HashMap;
    import java.util.Map;


    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.common.BitMatrix;


    import credream.utils.MatrixToImageWriter;


    public class CreQcode {
    public static void main(String[] args) {
    try {
    //1.以下是我測试用的一个format
    // BEGIN:VCARD
    // "VERSION:3.0
    // N:李德伟
    // EMAIL:1606841559@qq.com
    // TEL:12345678912
    // TEL;CELL:12345678912
    // ADR:山东济南齐鲁软件园
    // ORG:济南
    // TITLE:软件project师
    // URL:http://blog.csdn.net/lidew521
    // NOTE:呼呼測试下吧。。


    // END:VCARD"
    //2.依据測试结果推理
    //---------------------------------------
    //測试结果不加回车是不行的这种话会出现故障
    //就是扫描出来以后会没有内容
    //这里能够看出,微信解析二维码的方式
    //-------------------------------------------------
            //3.測试 能够被二维码识别
    //  这里也是有原因的,由于微信扫描二维码后会进行二次加工,
    //  这里加工的时候,是用java代码的,由于是android系统,所以在
    //  java中的回车是 ,因此这里就要用 来切割
        String content = "BEGIN:VCARD " +
        "VERSION:3.0 " +
        "N:李德伟 " +
        "EMAIL:1606841559@qq.com " +
        "TEL:12345678912" +
        "TEL;CELL:12345678912" +
        "ADR:山东济南齐鲁软件园 " +
        "ORG:" +
        "济南 " +
        "TITLE:软件project师 " +
        "URL:http://blog.csdn.net/lidew521 " +
        "NOTE:呼呼測试下吧。。。 " +
        "END:VCARD";
        String path = "D:/4S";
        
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        
        
        
        
        Map hints = new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400,hints);
        File file1 = new File(path,"名片.jpg"); 


        MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
        
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
    }
    -----------------------------------------------------------------------
    3.搞定了这样就能够了
      用微信扫描后,会自己主动出现保存页面,然后用户能够选择保存到通讯录中
    ------------------------------------------------------------------
    4.分析:
      a.这里有些亲们可能以为,扫描出来是个页面,就以为二维码里存放了一个jsp相似的页面
        事实上这样想是错误的
      b.非常好证明,由于用微信或者qq能够把扫描的内容加到通讯录里,可是用普通的二维码扫描软件是不能够的
        这就说明,事实上二维码中存放的不过一串被格式化了的数据而已,这段数据在上文中有提到
      c.微信之所以能够扫描成联系人的格式,是由于微信内部做了处理,这里处理过程应该是这种
        首先微信会调用二维码api来解析二维码
      d.其次微信会用解析出来的内容填充的实现准备好的jsp页面中,然后,在这个jsp页面中,就存在一段
        能够跟微信程序中java方法,联系的js代码,这样就能够通过微信中的java方法,调用android系统的通讯录了
        (这个部分说的可能不太清楚,android中js和java方法是能够相互调用传值的,大家能够学习下android,通讯录部分,也能够參考下
          我曾经写过的android教程)

查看全文
  • 相关阅读:
    win7台式机上使用airpods
    通达信自定义版面设置
    pthread_cond_wait函数实现
    为什么卸载手机微软必应浏览器
    看电子书的好处
    Web前端学习方法
    用Bing搜索单词的时候按下Ctrl键不放可以持续发音
    怎么制作档案盒标签
    三个按钮指向一个Click事件的错误
    What is .NET
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10894401.html
  • Copyright © 2011-2022 走看看