博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java开发_生成/解析自己的QRCode二维码
阅读量:5739 次
发布时间:2019-06-18

本文共 6874 字,大约阅读时间需要 22 分钟。

在看到了一个生成二维码的工具,于是就产生了一个想法:

为什么自己不做一个二维码的生成和解析工具呢?花了一个多钟的时间,嘿嘿,就做出来啦...

先来看看效果图吧:

CODE_QR:                                            

 CODE_128:        

PDF_417:

二维码的意思是:

下面是操作步骤:

一:下载zxing的压缩包:

可以到这里下载:

ZXing-2.1.zip:

得到:

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类中,定义了一些我们不知道的码,二维码只是其中的一种
57 * public BitMatrix encode(String contents, 58 BarcodeFormat format, 59 int width, int height, 60 Map
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二维码
103 * 在编码时需要将com.google.zxing.qrcode.encoder.Encoder.java中的
104 * static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";
105 * 修改为UTF-8,否则中文编译后解析不了
106 */107 public void encode(String contents, File file, BarcodeFormat format, int width, int height, Map
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 * 生成二维码图片
118 * 119 * @param matrix120 * @param format121 * 图片格式122 * @param file123 * 生成二维码图片位置124 * @throws IOException125 */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 * 生成二维码内容
133 * 134 * @param matrix135 * @return136 */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-8167 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 }

是不是很简单.....

源码下载:

你可能感兴趣的文章
新入职研发人员至少应该具备的能力
查看>>
非系统服务如何随系统启动时自动启动(rc.local加了可执行权限,仍然没有生效)...
查看>>
微信小程序官方示例 官方weui-wxss下载于安装 详解
查看>>
Mono for Android 篇一 环境的搭建
查看>>
数据结构练习
查看>>
怎么在浏览器里面调用微信聊天?
查看>>
mysql基础三(视图、触发器、函数、存储过程、事务、防注入)
查看>>
Infix to posfix 自己写stack,没有()
查看>>
【工具】今天有人问我可以直接离线一个完整的网站吗?有没有什么工具之类的?我推荐一款:Httrack (网站复制机)案例:离线你的博客园...
查看>>
小程序 公众号/h5相互跳转-webview
查看>>
杭电1253--胜利的大逃亡(Bfs)
查看>>
MakeFile 文件的使用
查看>>
hash联接算法
查看>>
python 装饰器,生成器,迭代器
查看>>
Learn Python 002: String Method
查看>>
laravel 使用QQ邮箱发送邮件
查看>>
VRPPT
查看>>
tab_bootstrap
查看>>
【leetcode】659. Split Array into Consecutive Subsequences
查看>>
HTTPie:一个不错的 HTTP 命令行客户端
查看>>