java生成二维码

来源:互联网 发布:javascript复选框全选 编辑:程序博客网 时间:2024/06/05 18:44


1.二维码概念:

    二维码/二维条码(2-dimensional bar code)是某种特定几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的图形。

2.二维码分类:

  1.线性堆叠式二维码:原理--建立在一维码基础之上。

   2.矩阵式二维码

   3.邮政吗

3.二维码优缺点:

   优:信息容量大、编码范围广、容错能力强、可靠性高、可加密、成本低、易制作、耐用。

  缺:容易引发病毒。信息泄漏

4.QR code:目前流行之一。专利公开、支持中文

5.生成方法:

   1.借助第三方jar

   2.javascript.jquer.qrcode.js

6.使用zxing.jar生成二维码

zxing3.2.1.jar

public class CrateQRCode {public static void main(String[] args) {int width=300;//图片宽度int height=300;//图片高度String format="png";//图片格式String contents="http://write.blog.csdn.net";//定义内容。//定义二维码参数HashMap hints=new HashMap();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//字符集hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//错误等级hints.put(EncodeHintType.MARGIN, 2);//边距//生成二维码    try {BitMatrix bitMatrix=new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height,hints);Path file=new File("E:/img.png").toPath();MatrixToImageWriter.writeToPath(bitMatrix, format, file);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
解析二维码

public class ReadQRCode {

    public static void main(String[] args)throws Exception {
        
        MultiFormatReader formatReader=new MultiFormatReader();
        
        File file=new File("E:/img.png");
        
        BufferedImage image=ImageIO.read(file);//读取图片
        
        BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
        
        HashMap hints=new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//字符集
        
        Result result=formatReader.decode(image, hints);
        
        System.out.println(result.toString());
    }
}

7.使用QR CODE生成二维码

  生成:

package cn.lanz.qrcode;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.imageio.ImageIO;import com.swetake.util.Qrcode;public class CreateQRCode {/** * * @throws IOException  * @描述: @param args */public static void main(String[] args) throws IOException {Qrcode x=new Qrcode();x.setQrcodeErrorCorrect('M');//纠错等级x.setQrcodeEncodeMode('B');//N代表数字,A代表a-z,B代表其他x.setQrcodeVersion(7);//版本号1-40int width=67+12*(7-1);int height=67+12*(7-1);String qrData="www.imcooc.com";//内容BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics2D gs=image.createGraphics();//绘图工具gs.setBackground(Color.white);//背景色gs.setColor(Color.BLACK);//画板色gs.clearRect(0, 0, width, height);int pixoff=2;//偏移量byte[] d=qrData.getBytes("gb2312");if(d.length>0 && d.length<120){boolean[][] s=x.calQrcode(d);for(int i=0;i<s.length;i++){for(int j=0;j<s.length;j++){if(s[i][j]){gs.fillRect(j*3+pixoff, i*3+pixoff, 3, 3);}}}}gs.dispose();image.flush();ImageIO.write(image, "png", new File("e:/qrcode.png"));}}

解析

package cn.lanz.qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;

import com.swetake.util.Qrcode;

public class ReadQRCode {

    /*
     * @throws IOException
     * @描述: @param args
     */
    public static void main(String[] args) throws IOException {
        
        File file=new File("e:/qrcode.png");
        
        BufferedImage bufferedImage=ImageIO.read(file);
        
        QRCodeDecoder codeDecoder=new QRCodeDecoder();
        String result=new String(codeDecoder.decode(new MYQRCodeImage(bufferedImage)),"gb2312");
        System.out.println(result);
    }

}

==============

package cn.lanz.qrcode;

import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;

public class MYQRCodeImage implements QRCodeImage {

    BufferedImage bufferedImage;
    
    public MYQRCodeImage(BufferedImage bufferedImage){
        this.bufferedImage=bufferedImage;
    }
    
    @Override
    public int getHeight() {
        return bufferedImage.getHeight();
    }

    @Override
    public int getPixel(int x, int y) {
        return bufferedImage.getRGB(x, y);
    }

    @Override
    public int getWidth() {
        return bufferedImage.getWidth();
    }

}

8.Jquer-qrcode.js生成二维码,web项目




9.其他形式的二维码

 

0 0
原创粉丝点击