二维码QRCode开源实现

 


日本人写的解码与编码实现Sourceforge.jp与swetake.com

这里把它们merge到一个jar文件里。(见附件中的压缩包zip文件)

 

编码测试:

 

 

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!");  
    }  
      
}

 

 

解码测试:

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