java二维码编码和解析

package com.banmacoffee.utils;
 
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
 
import javax.imageio.ImageIO;
 
import com.swetake.util.Qrcode;
 
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
 
public class QRCodeUtils {
 
     /**
      * 编码字符串内容到目标File对象中
      * @param encodeddata
      * @param destFile
      * @throws IOException
      */
     public static void qrCodeEncode(String encodeddata,File destFile) throws IOException{
         Qrcode qrcode = new Qrcode();
         qrcode.setQrcodeErrorCorrect( 'M' );
         qrcode.setQrcodeEncodeMode( 'B' );
         qrcode.setQrcodeVersion( 7 );
         byte [] d = encodeddata.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();
 
         ImageIO.write(bi, "png" , destFile);
         System.out.println( "Input Encoded data is:" +encodeddata);
     }
     
     /**
      * 解析二维码,返回解析内容
      * @param imageFile
      * @return
      */
     public static String qrCodeDecode(File imageFile) {
         String decodedData = null ;
         QRCodeDecoder decoder = new QRCodeDecoder();
         BufferedImage image = null ;
         try {
             image = ImageIO.read(imageFile);
         } catch (IOException e) {
             System.out.println( "Error: " + e.getMessage());
         }
 
         try {
             decodedData = new String(decoder.decode( new J2SEImage(image)), "GBK" );
             System.out.println( "Output Decoded Data is:" +decodedData);
         } catch (DecodingFailedException dfe) {
             System.out.println( "Error: " + dfe.getMessage());
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
         return decodedData;
     }
     
     public static void main(String[] args) {
         String FilePath = "C:\\Demo\\QRCode.png" ;
         File qrFile = new File(FilePath);
         
         //编码
         String encodeddata = "{id:10022,name:wandern}" ;
         try {
             QRCodeUtils.qrCodeEncode(encodeddata, qrFile);
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         };
         
         
         //解码
         String reText = QRCodeUtils.qrCodeDecode(qrFile);
         System.out.println(reText);
     }
}
 
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);
     }
}

猜你喜欢

转载自ouyangyuqing.iteye.com/blog/2097351