Google開發的QRcode二維碼生成和解碼及最大容量

jopen 10年前發布 | 79K 次閱讀 二維碼 條形碼/二維碼開發包

1.源碼
    package com.test;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeWriter;

public class main {  
    public static void main(String[] args) {  
        String filePath = "d:/qr_png.png";  
        String str = "";  
        /* 
        for (int i = 0; i < 2685; i++) { 
            str += 1; 
        } 
        */  

        for (int i = 0; i < 635; i++) {  
            str += "趙";  
        }  

        encode(str, filePath);  
        decode(filePath);  
    }  

    // qrcode 編碼  
    static void encode(String conent, String filePath) {  
        Charset charset = Charset.forName("UTF-8");  
        CharsetEncoder encoder = charset.newEncoder();  
        byte[] b = null;  
        try { // Convert a string to ISO-8859-1 bytes in a ByteBuffer  
            System.out.println("-------->" + conent.length());  
            ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(conent));  
            b = bbuf.array();  
        } catch (CharacterCodingException e) {  
            System.out.println(e.getMessage());  
        }  
        String data = "";  
        try {  
            data = new String(b, "iso8859-1");  
        } catch (UnsupportedEncodingException e) {  
            System.out.println(e.getMessage());  
        } // get a byte matrix for the data  
        BitMatrix matrix = null;  
        int h = 900;  
        int w = 800;  
        com.google.zxing.Writer writer = new QRCodeWriter();  
        try {  
            matrix = writer.encode(data,  
                    com.google.zxing.BarcodeFormat.QR_CODE, w, h);  
        } catch (com.google.zxing.WriterException e) {  
            System.out.println(e.getMessage());  
        }  
        File file = new File(filePath);  
        try {  
            MatrixToImageWriter.writeToFile(matrix, "PNG", file);  
            System.out.println("printing to " + file.getAbsolutePath());  
        } catch (IOException e) {  
            System.out.println(e.getMessage());  
        }  
    }  

    // qrcode 解碼  
    static void decode(String file) {  
        try {  
            Result result = null;  
            BufferedImage image = null;  
            image = ImageIO.read(new File(file));  
            LuminanceSource source = new BufferedImageLuminanceSource(image);  
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));  
            Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();  
            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
            result = new MultiFormatReader().decode(bitmap, hints);  
            String rtn = result.getText();  
            System.out.println(rtn);  
            System.out.println(rtn.length());  
        } catch (Exception ex) {  
            System.out.println(ex.toString());  
        }  
    }  
}  </pre></h1>

2.最多2685個字母635個漢字

635個漢字

2685個字母

 

來自:http://blog.csdn.net/whzhaochao/article/details/26354621

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!