【Java】生成二维码之Java实现


二维码生成

核心代码

二维码的特点:
1.高密度编码,信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。
2.编码范围广:该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可以表示多种语言文字;可表示图像数据。

示例如下:

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);
        }
    }

}

数据库连接

根据需求是否用到数据库:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DB {
    public static void main(String[] args) {
        System.out.println(DB.getConnection());
    }

    public static Connection getConnection(){
        Connection conn = null;
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/elevator?user=root&password=1908366654&characterEncoding=UTF-8&mysqlEncoding=UTF-8";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url);

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return conn;
    }

    public static PreparedStatement createPST(Connection conn, String sql) {
        PreparedStatement PST = null;
        try {
            PST = conn.prepareStatement(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return PST;
    }

    public static ResultSet getRs(PreparedStatement PST) {
        ResultSet rs = null;
        try {
            rs = PST.executeQuery();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs;
    }


    public static void closeConn(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void closePST(PreparedStatement PST) {
        if (PST != null) {
            try {
                PST.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void closeRS(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

Test1 用到数据库

import java.io.File;  
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Hashtable;  
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;  
@SuppressWarnings("unchecked")
public class Test {  


    public static void main(String[] args) throws Exception {
        //二维码封装链接
        String text = "http://192.168.1.66:18080/x5/UI2/v_/elevator/mainActivity.w?device=m&id=";  
        int width = 300;  
        int height = 300;  
        //二维码的图片格式  
        String format = "png";  
        Hashtable hints = new Hashtable();  
        //内容所使用编码  
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");  

        Map<String,String> ids = getIds();

        for(String id : ids.keySet()){
                BitMatrix bitMatrix = new MultiFormatWriter().encode(text+id,  
                    BarcodeFormat.QR_CODE, width, height, hints);  

            id = id.replace("/", "$");

             //二维码生成路径 
             File outputFile = new File("d:"+File.separator+"QR2"+File.separator + id + ".png");
             MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
        }

    }  

    public static Map<String,String> getIds(){
        Map<String,String> ids = new HashMap<String,String>();
        Connection conn = DB.getConnection();
        //String sql = "select * from elevatorinfor";
        String sql = "SELECT * FROM elevatorinfor WHERE department LIKE '%物业%' AND address='=碧水蓝湾'";
        PreparedStatement PST = DB.createPST(conn, sql);
        ResultSet rs = DB.getRs(PST);

        try {
            while(rs.next()){
                if(!rs.getString("id").equals("")){
                    //id 格式为    梯津CFD0029 截取为CFD0029; 个人项目需要,根据需求修改
                    ids.put(rs.getString("id").substring(2), rs.getString("department")+rs.getString("address"));
                }
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return ids;
    }

}  

Test2 把链接封装成二维码


import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Hashtable;
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;

public class TestQx{
    public static void main(String[] args) throws Exception {

        //地址生成二维码
        String text = "http://ad1.tslanpu.cn:18080/x5/UI2/v_/qianxi/Index.w?device=m";
        int width = 300;  
        int height = 300;  
        //二维码的图片格式  
        String format = "png";  
        Hashtable hints = new Hashtable();  
        //内容所使用编码  
        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+"QX"+File.separator + "名字" + 

    ".png");  
         MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
}

用到的jar包

core-3.1.0.jar

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值