zoukankan      html  css  js  c++  java
  • java生成二维码

    说到二维码,现在真是已经到处都是了,那么,什么是二维码?在Java中如何生成呢?
    二维码 ,又称“二维条码”, 二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动 识别功能、及处理图形旋转变化等特点。
    Java语言的话生成二维码有很多开发的jar包,如ZXing,QRCode,前者是谷歌开发的后者则是小日本开发的.

    ZXing的写法

    • 下载jar包
    • 编写工具类
    package com.service;
    import com.google.zxing.common.BitMatrix;
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStream;
    public class QRCodeMaker {
        private  Color foreground = Color.white;
        private  Color background = Color.black;
    
        /**
         * 默认构造器
         */
        public QRCodeMaker() {
        }
    
        /**
         * 初始化前景色和背景色.
         * @param foreground 前景色
         * @param background 背景色
         */
        public QRCodeMaker(Color foreground,Color background){
            this.foreground=foreground;
            this.background=background;
        }
    
        /**
         * BitMatrix转到BufferedImage.
         * @param bitMatrix 编码过得文字
         * @return
         * 返回bufferedImage
         */
        public BufferedImage toBufferedImage(BitMatrix bitMatrix){
            int width=bitMatrix.getWidth();
            int hight=bitMatrix.getHeight();
            BufferedImage image=new BufferedImage(width,hight,BufferedImage.TYPE_INT_RGB);
            for(int i=0;i<width;i++){
                for(int j=0;j<hight;j++){
                    image.setRGB(i,j,bitMatrix.get(i,j)?background.getRGB():foreground.getRGB());
                }
            }
            return image;
        }
    
        /**
         * 写到输出流中.
         * @param bitMatrix 编码过得文字
         * @param outputStream 输出流
         * @param format 图片格式
         */
        public void writeToStream(BitMatrix bitMatrix,OutputStream outputStream,String format){
            BufferedImage img=toBufferedImage(bitMatrix);
            try {
                ImageIO.write(img,format,outputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 写到文件.
         * @param matrix 编码过得文字
         * @param format 图片格式
         * @param file 目的文件
         */
        public  void writeToFile(BitMatrix matrix, String format, File file){
            BufferedImage image = toBufferedImage(matrix);
            try {
                ImageIO.write(image, format, file);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    • 使用工具类生成二维码
    import java.io.File;
    import java.util.Hashtable;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.common.BitMatrix;
    
    public class TestZxing {
        public static void main(String[] args) throws Exception {
            String text = "hello world!";
            // 二维码的大小
            int width = 250;
            int height = 250;
            //二维码的图片格式
            String format = "gif";
             // 内容所使用编码
            Hashtable<EncodeHintType,String> hints = 
                                          new Hashtable<EncodeHintType,String>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            BitMatrix bitMatrix = new MultiFormatWriter()
                      .encode(text, BarcodeFormat.QR_CODE, width, height, hints);
            // 生成二维码
            File outputFile = new File("d:" + File.separator + "csyor.com.gif");
            new QRCodeMaker.writeToFile(bitMatrix, format, outputFile);
        }
    }

    QRCode-maker用法

    这是一个封装好的工具包,
    原文地址

    1. 下载jar包
    2. 操作代码
    package com.test;
    
    import java.awt.Color;
    
    import org.marker.qrcode.QRCode;
    /**
     * 二维码测试
     * @author marker
     * */
    public class Test {
    
        public static void main(String[] args) {
    
            //获取二维码生成实例
            QRCode code = QRCode.getInstance();
            /* 个性化设置 */
            code.setColor(Color.DARK_GRAY);
            code.setBackground(Color.orange);
    
            //生成二维码并保存到C盘根目录
            code.encoder("http://aijava.cn", "C:abc.png");
            //读取二维码图片并解析
            String info = code.decoder("C:abc.png");
            System.out.println(info);
    
        }
    }
    
  • 相关阅读:
    RabbitMQ链接不上异常
    设计模式之禅之六大设计原则-迪米特原则
    <十二>面向对象分析之UML核心元素之节点和设备
    <十一>面向对象分析之UML核心元素之组件
    <十>面向对象分析之UML核心元素之关系
    <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性
    <八>面向对象分析之UML核心元素之分析类
    <七>面向对象分析之UML核心元素之包
    <六>面向对象分析之UML核心元素之业务实体
    Spring Cloud(七):使用SVN存储分布式配置中心文件和实现refresh
  • 原文地址:https://www.cnblogs.com/A-yes/p/9894200.html
Copyright © 2011-2022 走看看