当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
Java二维码的生成以及解析
发布时间:2010/8/3 11:19:01 来源:城市学习网 编辑:ziteng
  日本人写的解码与编码实现Sourceforge.jp与swetake.com
  这里把它们merge到一个jar文件里。
  编码测试:
  Java代码
  import java.awt.Color;
  import java.awt.Graphics2D;
  import java.awt.image.BufferedImage;
  import java.io.File;
  import javax.imageio.ImageIO;
  import com.swetake.util.Qrcode;
  public class QRCodeEncoderTest {
  public static void main(String[] args) throws Exception {
  Qrcode qrcode=new Qrcode();
  qrcode.setQrcodeErrorCorrect('M');
  qrcode.setQrcodeEncodeMode('B');
  qrcode.setQrcodeVersion(7);
  String testString = "_-+^%$#@!~`=&)*(";
  byte[] d =testString.getBytes("GBK");
  BufferedImage bi = new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB);
  // createGraphics
  Graphics2D g = bi.createGraphics();
  // set background
  g.setBackground(Color.WHITE);
  g.clearRect(0, 0, 139, 139);
  g.setColor(Color.BLACK);
  if (d.length>0 && d.length <123){
  boolean[][] b = qrcode.calQrcode(d);
  for (int i=0;i<b.length;i++){
  for (int j=0;j<b.length;j++){
  if (b[j][i]) {
  g.fillRect(j*3+2,i*3+2,3,3);
  }
  }
  }
  } [NextPage]   g.dispose();
  bi.flush();
  String FilePath="TestQRCode.png";
  File f = new File(FilePath);
  ImageIO.write(bi, "png", f);
  System.out.println("doned!");
  }
  }
  import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import com.swetake.util.Qrcode; public class QRCodeEncoderTest { public static void main(String[] args) throws Exception { Qrcode qrcode=new Qrcode(); qrcode.setQrcodeErrorCorrect('M'); qrcode.setQrcodeEncodeMode('B'); qrcode.setQrcodeVersion(7); String testString = "_-+^%$#@!~`=&)*("; byte[] d =testString.getBytes("GBK"); BufferedImage bi = new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB); // createGraphics Graphics2D g = bi.createGraphics(); // set background g.setBackground(Color.WHITE); g.clearRect(0, 0, 139, 139); g.setColor(Color.BLACK); if (d.length>0 && d.length <123){ boolean[][] b = qrcode.calQrcode(d); for (int i=0;i<b.length;i++){ for (int j=0;j<b.length;j++){ if (b[j][i]) { g.fillRect(j*3+2,i*3+2,3,3); } } } } g.dispose(); bi.flush(); String FilePath="TestQRCode.png"; File f = new File(FilePath); ImageIO.write(bi, "png", f); System.out.println("doned!"); } }
  解码测试:
  Java代码
  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 jp.sourceforge.qrcode.data.QRCodeImage;
  import jp.sourceforge.qrcode.exception.DecodingFailedException;
  public class QRCodeDecoderTest {
  public QRCodeDecoderTest() {
  }
 [NextPage]   public static void main(String[] args) {
  QRCodeDecoder decoder = new QRCodeDecoder();
  File imageFile = new File("TestQRCode.png");
  BufferedImage image = null;
  try {
  image = ImageIO.read(imageFile);
  } catch (IOException e) {
  System.out.println("Error: "+ e.getMessage());
  }
  try {
  String decodedData = new String(decoder.decode(new J2SEImage(image)),"GBK");
  System.out.println(decodedData);
  } catch (DecodingFailedException dfe) {
  System.out.println("Error: " + dfe.getMessage());
  } catch (UnsupportedEncodingException e) {
  e.printStackTrace();
  }
  }
  }
  class J2SEImage implements QRCodeImage {
  BufferedImage image;
  public J2SEImage(BufferedImage image) {
  this.image = image;
  }
  public int getWidth() {
  return image.getWidth();
  }
  public int getHeight() {
  return image.getHeight();
  }
  public int getPixel(int x, int y) {
  return image.getRGB(x, y);
  }
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved