码迷,mamicode.com
首页 > 编程语言 > 详细

java代码生成二维码图片

时间:2014-11-05 12:53:26      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   使用   java   

需要使用到的jar包:QRCode.jar

这里提供一个下载:点此下载QRCode.jar

因为代码比较简单。就不多啰嗦,直接帖代码了,拷过去就能直接用.

TwoDimensionCode.java:
  1 import java.awt.Color;
  2 import java.awt.Graphics2D;
  3 import java.awt.image.BufferedImage;
  4 import java.io.File;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.OutputStream;
  8 
  9 import javax.imageio.ImageIO;
 10 
 11 import jp.sourceforge.qrcode.QRCodeDecoder;
 12 import jp.sourceforge.qrcode.exception.DecodingFailedException;
 13 
 14 import com.swetake.util.Qrcode;
 15 
 16 
 17 public class TwoDimensionCode {
 18      
 19       /**
 20       * 生成二维码(QRCode)图片
 21       * @param content 存储内容
 22       * @param imgPath 图片路径
 23       */
 24       public void encoderQRCode(String content, String imgPath)  {
 25             this.encoderQRCode(content, imgPath, "png", 7);
 26      }
 27      
 28       /**
 29       * 生成二维码(QRCode)图片
 30       * @param content 存储内容
 31       * @param output 输出流
 32       */
 33       public void encoderQRCode(String content, OutputStream output) {
 34             this.encoderQRCode(content, output, "png", 7);
 35      }
 36      
 37       /**
 38       * 生成二维码(QRCode)图片
 39       * @param content 存储内容
 40       * @param imgPath 图片路径
 41       * @param imgType 图片类型
 42       */
 43       public void encoderQRCode(String content, String imgPath,  String imgType) {
 44             this.encoderQRCode(content, imgPath, imgType, 7);
 45      }
 46      
 47       /**
 48       * 生成二维码(QRCode)图片
 49       * @param content 存储内容
 50       * @param output 输出流
 51       * @param imgType 图片类型
 52       */
 53       public void encoderQRCode(String content, OutputStream output, String imgType) {
 54             this.encoderQRCode(content, output, imgType, 7);
 55      }
 56 
 57       /**
 58       * 生成二维码(QRCode)图片
 59       * @param content 存储内容
 60       * @param imgPath 图片路径
 61       * @param imgType 图片类型
 62       * @param size 二维码尺寸
 63       */
 64       public void encoderQRCode(String content, String imgPath,  String imgType, int size) {
 65             try {
 66                 BufferedImage bufImg =this.qRCodeCommon(content, imgType, size);
 67                 
 68                 File imgFile = new File(imgPath);
 69                  // 生成二维码QRCode图片
 70                 ImageIO. write(bufImg, imgType , imgFile);
 71            } catch (Exception e) {
 72                 e.printStackTrace();
 73            }
 74      }
 75 
 76       /**
 77       * 生成二维码(QRCode)图片
 78       * @param content 存储内容
 79       * @param output 输出流
 80       * @param imgType 图片类型
 81       * @param size 二维码尺寸
 82       */
 83       public void encoderQRCode(String content, OutputStream output, String imgType, int size) {
 84             try {
 85                 BufferedImage bufImg =this.qRCodeCommon(content, imgType, size);
 86                  // 生成二维码QRCode图片
 87                 ImageIO. write(bufImg, imgType, output);
 88            } catch (Exception e) {
 89                 e.printStackTrace();
 90            }
 91      }
 92      
 93       /**
 94       * 生成二维码(QRCode)图片的公共方法
 95       * @param content 存储内容
 96       * @param imgType 图片类型
 97       * @param size 二维码尺寸
 98       * @return
 99       */
100       private BufferedImage qRCodeCommon(String content, String  imgType, int size) {
101            BufferedImage bufImg = null;
102             try {
103                 Qrcode qrcodeHandler = new Qrcode();
104                  // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
105                 qrcodeHandler.setQrcodeErrorCorrect( ‘M‘);
106                 qrcodeHandler.setQrcodeEncodeMode( ‘B‘);
107                  // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
108                 qrcodeHandler.setQrcodeVersion(size);
109                  // 获得内容的字节数组,设置编码格式
110                  byte[] contentBytes = content.getBytes( "utf-8");
111                  // 图片尺寸
112                  int imgSize = 67 + 12 * (size - 1);
113                 bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB );
114                 Graphics2D gs = bufImg.createGraphics();
115                  // 设置背景颜色
116                 gs.setBackground(Color. WHITE);
117                 gs.clearRect(0, 0, imgSize, imgSize);
118 
119                  // 设定图像颜色> BLACK
120                 gs.setColor(Color. BLACK);
121                  // 设置偏移量,不设置可能导致解析出错
122                  int pixoff = 2;
123                  // 输出内容> 二维码
124                  if (contentBytes. length > 0 && contentBytes.length < 800) {
125                       boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
126                       for ( int i = 0; i < codeOut. length; i++) {
127                             for ( int j = 0; j < codeOut. length; j++) {
128                                  if (codeOut[j][i]) {
129                                      gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
130                                 }
131                            }
132                      }
133                 } else {
134                       throw new Exception( "QRCode content bytes  length = " + contentBytes. length + " not in [0, 800].");
135                 }
136                 gs.dispose();
137                 bufImg.flush();
138            } catch (Exception e) {
139                 e.printStackTrace();
140            }
141             return bufImg;
142      }
143      
144       /**
145       * 解析二维码(QRCode)
146       * @param imgPath 图片路径
147       * @return
148       */
149       public String decoderQRCode(String imgPath) {
150             // QRCode 二维码图片的文件
151            File imageFile = new File(imgPath);
152            BufferedImage bufImg = null;
153            String content = null;
154             try {
155                 bufImg = ImageIO. read(imageFile);
156                 QRCodeDecoder decoder = new QRCodeDecoder();
157                 content = new String(decoder.decode( newTwoDimensionCodeImage(bufImg)), "utf-8" );
158            } catch (IOException e) {
159                 System. out.println( "Error: " + e.getMessage());
160                 e.printStackTrace();
161            } catch (DecodingFailedException dfe) {
162                 System. out.println( "Error: " + dfe.getMessage());
163                 dfe.printStackTrace();
164            }
165             return content;
166      }
167      
168       /**
169       * 解析二维码(QRCode)
170       * @param input 输入流
171       * @return
172       */
173       public String decoderQRCode(InputStream input) {
174            BufferedImage bufImg = null;
175            String content = null;
176             try {
177                 bufImg = ImageIO. read(input);
178                 QRCodeDecoder decoder = new QRCodeDecoder();
179                 content = new String(decoder.decode( newTwoDimensionCodeImage(bufImg)), "utf-8" );
180            } catch (IOException e) {
181                 System. out.println( "Error: " + e.getMessage());
182                 e.printStackTrace();
183            } catch (DecodingFailedException dfe) {
184                 System. out.println( "Error: " + dfe.getMessage());
185                 dfe.printStackTrace();
186            }
187             return content;
188      }
189 
190       public static void main(String[] args) {
191            String imgPath = "G:/ZTFCard.png";
192            String encoderContent = "我的名片" + "\n我的微博:[http://t.qq.com/fengqingyan]" + "\n电子邮件:[zhitianfeng@hotmail.com]" +"\n手机:[15601973133]" ;
193            TwoDimensionCode handler = new TwoDimensionCode();
194            handler.encoderQRCode(encoderContent, imgPath, "png" );
195 //         try {
196 //              OutputStream output = new FileOutputStream(imgPath);
197 //              handler.encoderQRCode(content, output);
198 //         } catch (Exception e) {
199 //              e.printStackTrace();
200 //         }
201            System. out.println( "========encoder success" );
202            
203            
204            String decoderContent = handler.decoderQRCode(imgPath);
205            System. out.println( "解析结果如下:" );
206            System. out.println(decoderContent);
207            System. out.println( "========decoder success!!!" );
208      }
209 }

下面是一个测试的类:QRtest.java

public class QRtest {
    public static void main(String[] args){
        TwoDimensionCode td = new TwoDimensionCode();
        td.encoderQRCode("这是一个测试文件类","d://123.jpg","jpg",12);
    }
}

END!

 

java代码生成二维码图片

标签:style   blog   http   io   color   ar   os   使用   java   

原文地址:http://www.cnblogs.com/yijian-insist/p/4075893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!