zoukankan      html  css  js  c++  java
  • JAVA生成二维码并转化为二进制在页面展示

    引用jar包:

    zxing的core包,下载路径可参考:http://download.csdn.net/detail/sxg0205/9461106


    java代码:

    引用包:

    import java.awt.image.BufferedImage;

    import java.io.ByteArrayOutputStream;

    import java.io.IOException;
    import java.util.Hashtable;
    import javax.imageio.ImageIO;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.common.BitMatrix;
    import sun.misc.BASE64Encoder;  


    方法:

    /**
    * 二维码生成器

    * @param text 二维码内容
    * @throws IOException 
    */
        @SuppressWarnings({ "unchecked", "rawtypes", "restriction" })
    public static String generalQRCode(String url) {   
            Hashtable hints= new Hashtable();   
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");   
            String binary = null;
            
    try {
    BitMatrix bitMatrix = new MultiFormatWriter().encode(
    url, BarcodeFormat.QR_CODE, 200, 200, hints);

    // 实现一: 输出图片到指定目录
    // File outputFile = new File("d://1.jpg");
    //        MatrixToImageWriter.writeToFile(bitMatrix, "png", outputFile);

    // 实现二:生成二维码图片并将图片转为二进制传递给前台
    // 1、读取文件转换为字节数组
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    BufferedImage image = toBufferedImage(bitMatrix);
    ////
    ImageIO.write(image, "png", out);
    byte[] bytes = out.toByteArray();

    // 2、将字节数组转为二进制
    BASE64Encoder encoder = new BASE64Encoder(); 
    binary = encoder.encodeBuffer(bytes).trim(); 

    } catch (Exception e) {
    e.printStackTrace();


    return binary;
        }   


    // 其他调用方法

        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) ? 0xFF000000 : 0xFFFFFFFF);
              }
            }
            
            return image;
          }

    前台ajax方法:

    $.ajax({
    url: 方法url,
    type:'post',
    success : function(data) {
    $('#img').attr('src', 'data:image/jpg;base64,' + data);
    }
    });


    注意:img 的src前面需要拼接data:image/jpg;base64, 在加上后台生成的二进制才能正确解析二进制


  • 相关阅读:
    第一期知识点
    如何正确地停止一个线程?
    JVM知识点总览-高级Java工程师面试必备
    常见GC算法,CMS以及G1的垃圾回收过程,CMS的各个阶段哪两个是Stop the world的,CMS会不会产生碎片,G1的优势。
    深入理解分布式事务,高并发下分布式事务的解决方案
    JVM中的逃逸分析
    JVM内存初学 堆、栈、方法区
    JVM方法栈的工作过程,方法栈和本地方法栈有什么区别。
    JVM的基本结构和JVM的内存结构
    一致性hash算法应用场景、详解与实现(JAVA)
  • 原文地址:https://www.cnblogs.com/jpfss/p/9518327.html
Copyright © 2011-2022 走看看