Google开发的QRcode二维码生成和解码及最大容量
jopen
10年前
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个字母
来自:http://blog.csdn.net/whzhaochao/article/details/26354621