java 二维码

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

  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                           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 {                 //消除乱码          contents = new String(contents.getBytes("UTF-8"), "ISO-8859-1"); 
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

时间: 2024-12-17 22:17:42

java 二维码的相关文章

java二维码生成

二维码,是一种采用黑白相间的平面几何图形经过相应的编码算法来记载文字.图画.网址等信息的条码图画.如下图 二维码的特色: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比一般条码信息容量约高几十倍. 2.  编码规模广 该条码能够把图画.声响.文字.签字.指纹等能够数字化的信息进行编码,用条码表明出来:能够表明多种语言文字:可表明图画数据. 3.  容错能力强,具有纠错功用 这使得二维条码因穿孔.污损等导致部分损坏时,照样能够正确

Java二维码生成与解码

基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.1.0</version> </dependen

java二维码编码和解析工具类

用到两个jar包: QRCode.jar Qrcodeen.jar 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; imp

java二维码生成与解析代码实现

二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起局部损坏时,照样可以正确

java二维码和微信

需要:   jelly-core-1.7.0.GA.jar 网站:   http://lychie.github.io/products.html 将下载下来的 jelly-core-1.7.0.GA.jar 丢到项目里,不需要编写任何 java 代码,只需要在项目的 web.xml 文件中配置相关信息即可. 验证码 基于 Servlet 实现,在 web.xml 中配置即可使用.并支持自定义样式,常用的配置项见下表: 属性名称 属性描述 默认值 可选值 border 边框 no no,yes

java二维码的生成与解析代码

二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起局部损坏时,照样可以正确

Atitit java 二维码识别 图片识别

1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数据编码31.6. 错误修正容量L水平7%的字码可被修正M水平15%的字码可被修正Q水平25%的字码可被修正H水平30%的字码可被修正31.7. QR是怎么对数据码加上纠错码的?31.8. 画二维码图41.9. 简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符: 选择纠错等级,71.10. qr长度容量7 1.1.解码编

[转]java二维码生成与解析代码实现

转载地址:点击打开链接 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起

java二维码生成工具

import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import java.util.Map; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import