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, 在加上后台生成的二进制才能正确解析二进制


  • 相关阅读:
    @value传值到static字段
    [Err] 1701
    eclipse search只能打开一个文件
    FTPClient登录慢的问题
    nginx克隆之后问题
    centos-ftp搭建
    addEventListener和attachEvent的区别 分类: JavaScript 2015-05-12 19:03 702人阅读 评论(0) 收藏
    python中使用eval() 和 ast.literal_eval()的区别 分类: Python 2015-05-11 15:21 1216人阅读 评论(0) 收藏
    初学者必知的Python中优雅的用法 分类: Python 2015-05-11 15:02 782人阅读 评论(0) 收藏
    javascript中函数声明和函数表达式的区别 分类: JavaScript 2015-05-07 21:41 897人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/jpfss/p/9518327.html
Copyright © 2011-2022 走看看