java生成/解析二维码
2015-08-24 13:35
477 查看
在http://www.ostools.net/qr看到了一个生成二维码的工具,于是就产生了一个想法:
为什么自己不做一个二维码的生成和解析工具呢?花了一个多钟的时间,嘿嘿,就做出来啦...
先来看看效果图吧:
CODE_QR:
CODE_128:
PDF_417:
二维码的意思是:
下面是操作步骤:
一:下载zxing的压缩包:
可以到这里下载:http://code.google.com/p/zxing/downloads/list
ZXing-2.1.zip:http://code.google.com/p/zxing/downloads/detail?name=ZXing-2.1.zip&can=2&q=
得到:
zxing-2.1\core\core.jar
zxing-2.1\javase\javase.jar
二:把他添加进入你的项目的里面:
/QRCodes/src/com/b510/qrcode/QRCode.java
是不是很简单.....
源码下载:http://files.cnblogs.com/hongten/QRCodes.rar
为什么自己不做一个二维码的生成和解析工具呢?花了一个多钟的时间,嘿嘿,就做出来啦...
先来看看效果图吧:
CODE_QR:
CODE_128:
PDF_417:
二维码的意思是:
下面是操作步骤:
一:下载zxing的压缩包:
可以到这里下载:http://code.google.com/p/zxing/downloads/list
ZXing-2.1.zip:http://code.google.com/p/zxing/downloads/detail?name=ZXing-2.1.zip&can=2&q=
得到:
zxing-2.1\core\core.jar
zxing-2.1\javase\javase.jar
二:把他添加进入你的项目的里面:
/QRCodes/src/com/b510/qrcode/QRCode.java
1 /** 2 * 3 */ 4 package com.b510.qrcode; 5 6 import java.awt.image.BufferedImage; 7 import java.io.File; 8 import java.io.IOException; 9 import java.util.Hashtable; 10 import java.util.Map; 11 12 import javax.imageio.ImageIO; 13 14 import com.google.zxing.BarcodeFormat; 15 import com.google.zxing.BinaryBitmap; 16 import com.google.zxing.DecodeHintType; 17 import com.google.zxing.EncodeHintType; 18 import com.google.zxing.LuminanceSource; 19 import com.google.zxing.MultiFormatReader; 20 import com.google.zxing.MultiFormatWriter; 21 import com.google.zxing.ReaderException; 22 import com.google.zxing.Result; 23 import com.google.zxing.Writer; 24 import com.google.zxing.WriterException; 25 import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 26 import com.google.zxing.common.BitMatrix; 27 import com.google.zxing.common.HybridBinarizer; 28 import com.google.zxing.oned.CodaBarWriter; 29 import com.google.zxing.oned.Code128Writer; 30 import com.google.zxing.oned.Code39Writer; 31 import com.google.zxing.oned.EAN13Writer; 32 import com.google.zxing.oned.EAN8Writer; 33 import com.google.zxing.oned.ITFWriter; 34 import com.google.zxing.oned.UPCAWriter; 35 import com.google.zxing.pdf417.encoder.PDF417Writer; 36 import com.google.zxing.qrcode.QRCodeWriter; 37 38 /** 39 * 利用zxing开源工具生成二维码QRCode 40 * 41 * @date 2012-10-26 42 * @author xhw 43 * 44 */ 45 public class QRCode { 46 private static final int BLACK = 0xff000000; 47 private static final int WHITE = 0xFFFFFFFF; 48 49 /** 50 * @param args 51 */ 52 public static void main(String[] args) { 53 QRCode test = new QRCode(); 54 File file = new File("C://test.png"); 55 /** 56 * 在com.google.zxing.MultiFormatWriter类中,定义了一些我们不知道的码,二维码只是其中的一种<br> 57 * public BitMatrix encode(String contents, 58 BarcodeFormat format, 59 int width, int height, 60 d6d2 Map<EncodeHintType,?> hints) throws WriterException { 61 Writer writer; 62 switch (format) { 63 case EAN_8: 64 writer = new EAN8Writer(); 65 break; 66 case EAN_13: 67 writer = new EAN13Writer(); 68 break; 69 case UPC_A: 70 writer = new UPCAWriter(); 71 break; 72 case QR_CODE: //这里是二维码 73 writer = new QRCodeWriter(); 74 break; 75 case CODE_39: 76 writer = new Code39Writer(); 77 break; 78 case CODE_128: //这个可以生成 79 writer = new Code128Writer(); 80 break; 81 case ITF: 82 writer = new ITFWriter(); 83 break; 84 case PDF_417: //这个可以生成 85 writer = new PDF417Writer(); 86 break; 87 case CODABAR: 88 writer = new CodaBarWriter(); 89 break; 90 default: 91 throw new IllegalArgumentException("No encoder available for format " + format); 92 } 93 return writer.encode(contents, format, width, height, hints); 94 } 95 96 */ 97 test.encode("helloworld,I'm Hongten.welcome to my zone:http://www.cnblogs.com/hongten", file, BarcodeFormat.QR_CODE, 200, 200, null); 98 test.decode(file); 99 } 100 101 /** 102 * 生成QRCode二维码<br> 103 * 在编码时需要将com.google.zxing.qrcode.encoder.Encoder.java中的<br> 104 * static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";<br> 105 * 修改为UTF-8,否则中文编译后解析不了<br> 106 */ 107 public void encode(String contents, File file, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints) { 108 try { 109 BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, format, width, height); 110 writeToFile(bitMatrix, "png", file); 111 } catch (Exception e) { 112 e.printStackTrace(); 113 } 114 } 115 116 /** 117 * 生成二维码图片<br> 118 * 119 * @param matrix 120 * @param format 121 * 图片格式 122 * @param file 123 * 生成二维码图片位置 124 * @throws IOException 125 */ 126 public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException { 127 BufferedImage image = toBufferedImage(matrix); 128 ImageIO.write(image, format, file); 129 } 130 131 /** 132 * 生成二维码内容<br> 133 * 134 * @param matrix 135 * @return 136 */ 137 public static BufferedImage toBufferedImage(BitMatrix matrix) { 138 int width = matrix.getWidth(); 139 int height = matrix.getHeight(); 140 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 141 for (int x = 0; x < width; x++) { 142 for (int y = 0; y < height; y++) { 143 image.setRGB(x, y, matrix.get(x, y) == true ? BLACK : WHITE); 144 } 145 } 146 return image; 147 } 148 149 /** 150 * 解析QRCode二维码 151 */ 152 @SuppressWarnings("unchecked") 153 public void decode(File file) { 154 try { 155 BufferedImage image; 156 try { 157 image = ImageIO.read(file); 158 if (image == null) { 159 System.out.println("Could not decode image"); 160 } 161 LuminanceSource source = new BufferedImageLuminanceSource(image); 162 BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 163 Result result; 164 @SuppressWarnings("rawtypes") 165 Hashtable hints = new Hashtable(); 166 //解码设置编码方式为:utf-8 167 hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); 168 result = new MultiFormatReader().decode(bitmap, hints); 169 String resultStr = result.getText(); 170 System.out.println("解析后内容:" + resultStr); 171 } catch (IOException ioe) { 172 System.out.println(ioe.toString()); 173 } catch (ReaderException re) { 174 System.out.println(re.toString()); 175 } 176 } catch (Exception ex) { 177 System.out.println(ex.toString()); 178 } 179 } 180 }
是不是很简单.....
源码下载:http://files.cnblogs.com/hongten/QRCodes.rar
相关文章推荐
- 深入理解Java内存模型之系列篇
- hessian java调用
- ECLIPSE实现了界面显示所有类
- [leetcode-257]Binary Tree Paths(java)
- spring配置jedisPool
- Missing artifact javax.jms:jms:jar: Missing artifact com.sun.jdmk Missing artifact com.sun.jmx:jmxri
- 【Developer Log】Java的内存使用、垃圾回收和内存泄漏
- Spring事务的隔离级别
- java中的IO操作总结(四)
- java中的IO操作总结(三)
- java中的IO操作总结(二)
- Spring Security : limit login attempts example
- Java反射api详解
- Java中的迭代器模式
- eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
- MyEclipse8.5中SVN的安装方法
- java quartz的使用,做时间轮询调用 CronTrigger
- JSON转javabean(pojo)利器
- Java之旅hibernate(7)——数据加载get和load
- Java OCR tesseract 图像智能字符识别技术 Java代码实现