需要使用到的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电子邮件:[[email protected]]" +"\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!
时间: 2024-10-10 07:58:40