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

这里把它们merge到一个jar文件里。

编码测试:
Java代码
  1.   
  2. import java.awt.Color;   
  3. import java.awt.Graphics2D;   
  4. import java.awt.image.BufferedImage;   
  5. import java.io.File;   
  6.   
  7. import javax.imageio.ImageIO;   
  8.   
  9. import com.swetake.util.Qrcode;   
  10.   
  11. public class QRCodeEncoderTest {   
  12.     public static void main(String[] args) throws Exception {   
  13.         Qrcode qrcode=new Qrcode();   
  14.         qrcode.setQrcodeErrorCorrect('M');   
  15.         qrcode.setQrcodeEncodeMode('B');   
  16.         qrcode.setQrcodeVersion(7);   
  17.   
  18.         String testString = "_-+^%$#@!~`=&)*(";   
  19.            
  20.         byte[] d =testString.getBytes("GBK");   
  21.            
  22.            
  23.         BufferedImage bi = new BufferedImage(139139, BufferedImage.TYPE_INT_RGB);   
  24.            
  25.         // createGraphics   
  26.         Graphics2D g = bi.createGraphics();   
  27.            
  28.         // set background   
  29.         g.setBackground(Color.WHITE);   
  30.         g.clearRect(00139139);   
  31.            
  32.         g.setColor(Color.BLACK);   
  33.            
  34.            
  35.         if (d.length>0 && d.length <123){   
  36.             boolean[][] b = qrcode.calQrcode(d);   
  37.                
  38.             for (int i=0;i<b.length;i++){   
  39.                    
  40.                 for (int j=0;j<b.length;j++){   
  41.                     if (b[j][i]) {   
  42.                         g.fillRect(j*3+2,i*3+2,3,3);   
  43.                     }   
  44.                 }   
  45.                
  46.             }   
  47.         }   
  48.            
  49.         g.dispose();   
  50.         bi.flush();   
  51.   
  52.         String FilePath="TestQRCode.png";   
  53.         File f = new File(FilePath);   
  54.            
  55.         ImageIO.write(bi, "png", f);   
  56.         System.out.println("doned!");   
  57.     }   
  58.        
  59. }  


解码测试:
Java代码 复制代码
  1.   
  2. import java.awt.image.BufferedImage;   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.io.UnsupportedEncodingException;   
  6.   
  7. import javax.imageio.ImageIO;   
  8.   
  9. import jp.sourceforge.qrcode.QRCodeDecoder;   
  10. import jp.sourceforge.qrcode.data.QRCodeImage;   
  11. import jp.sourceforge.qrcode.exception.DecodingFailedException;   
  12. public class QRCodeDecoderTest {   
  13.        
  14.     public QRCodeDecoderTest() {   
  15.     }   
  16.        
  17.     public static void main(String[] args) {   
  18.            
  19.         QRCodeDecoder decoder = new QRCodeDecoder();   
  20.            
  21.         File imageFile = new File("TestQRCode.png");   
  22.            
  23.         BufferedImage image = null;   
  24.            
  25.         try {   
  26.             image = ImageIO.read(imageFile);   
  27.         } catch (IOException e) {   
  28.             System.out.println("Error: "+ e.getMessage());   
  29.         }   
  30.         try {   
  31.                
  32.             String decodedData = new String(decoder.decode(new J2SEImage(image)),"GBK");   
  33.                
  34.             System.out.println(decodedData);   
  35.         } catch (DecodingFailedException dfe) {   
  36.             System.out.println("Error: " + dfe.getMessage());   
  37.         } catch (UnsupportedEncodingException e) {   
  38.             e.printStackTrace();   
  39.         }   
  40.            
  41.            
  42.     }   
  43. }   
  44.     
  45. class J2SEImage implements QRCodeImage {   
  46.     BufferedImage image;   
  47.        
  48.     public J2SEImage(BufferedImage image) {   
  49.         this.image = image;   
  50.     }   
  51.        
  52.     public int getWidth() {   
  53.         return image.getWidth();   
  54.     }   
  55.        
  56.     public int getHeight() {   
  57.         return image.getHeight();   
  58.     }   
  59.        
  60.     public int getPixel(int x, int y) {   
  61.         return image.getRGB(x, y);   
  62.     }   
  63.        
  64. }  
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()