zoukankan      html  css  js  c++  java
  • Google开发的QRcode二维码生成和解码及最大容量

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

    2.最多2685个字母635个汉字

    635个汉字


    2685个字母


  • 相关阅读:
    poj 3261 Milk Patterns 后缀数组+二分
    poj 2774 Long Long Message(后缀数组入门题)
    hdu 5719 Arrange
    hdu 5720 Wool
    DROP TABLE 恢复
    MySQL数据库改名的三种方法
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    MySQL常用SQL语句优化
    EXPLAIN 命令详解
    mysql sql语句大全
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023452.html
Copyright © 2011-2022 走看看