首页 > 代码库 > java代码生成二维码图片

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                  // 设定图像颜色> BLACK120                 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       * @return148       */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       * @return172       */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代码生成二维码图片