java二维码开发
之前就写过很多关于二维码的东西,一直没有时间整理一下,所以呢今天就先来介绍一下如何利用java开发二维码。生成二维码有很多jar包可以实现,例如Zxing,QRcode,前者是谷歌的,后者日本的,这里我将对这两种方式的具体实现方法做简单介绍。
一、二维码的原理
二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。

二、具体实现
1.QRcode
(1).获取QRcode.jar, 下载链接:http://www.swetake.com/qrcode/java/qr_java.html (官网) http://download.csdn.net/download/xch_yang/9514836
(2).将jar包添加进项目的构建路径(将jar包复制到项目下,右键:构建路径--添加至构建路径)。
代码如下:
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;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode; public class QrcodeImg {
/**
* 生成二维码图片
* @author 杨雄超
* @param content 二维码内容
* @param imgPath 二维码图片的保存路径
*/
public static void getQrcodeImg(String content,String imgPath){
int width=;
int height=;
//实例化Qrcode
Qrcode qrcode=new Qrcode();
//设置二维码的排错率L(7%) M(15%) Q(25%) H(35%)
qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B');
//设置二维码尺寸(1~49)
qrcode.setQrcodeVersion();
//设置图片尺寸
BufferedImage bufImg=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); //绘制二维码图片
Graphics2D gs=bufImg.createGraphics();
//设置二维码背景颜色
gs.setBackground(Color.WHITE);
//创建一个矩形区域
gs.clearRect(, , width, height);
//设置二维码的图片颜色值 黑色
gs.setColor(Color.BLACK); //获取内容的字节数组,设置编码集
try {
byte[] contentBytes=content.getBytes("utf-8");
int pixoff=;
//输出二维码
if(contentBytes.length>&&contentBytes.length<){
boolean[][] codeOut=qrcode.calQrcode(contentBytes);
for(int i=;i<codeOut.length;i++){
for(int j=;j<codeOut.length;j++){
if(codeOut[j][i]){
gs.fillRect(j*+pixoff, i*+pixoff, , );
}
}
}
}
gs.dispose();
bufImg.flush();
//生成二维码图片
File imgFile=new File(imgPath);
ImageIO.write(bufImg, "png", imgFile); System.out.println("二维码生成成功!"); } catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } public static void main(String[] args) {
getQrcodeImg("http://m.55bbs.com/liren_2003609/", "E:\\test.png");
}
}
结果:内容为网页图片的链接,所以扫描之后结果如图,当然,你可以将内容换成文字。

2.ZXing
(1).获取ZXing包, 下载链接:http://download.csdn.net/detail/xch_yang/9514956
(2)这里我们只需要Zxing包中的core-3.0.0.jar,所以将core-3.0.0.jar添加至构建路径。
实现代码:
创建类:ImageWrite(二维码的生成需要借助这个类)
import javax.imageio.ImageIO;
import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;
public final class ImageWrite {
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
private ImageWrite() {}
public static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = ; x < width; x++) {
for (int y = ; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
}
} return image;
}
public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, file)) {
throw new IOException("Could not write an image of format " + format + " to " + file);
}
}
public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, stream)) {
throw new IOException("Could not write an image of format " + format);
}
}
}
创建类:QRcodeEncode
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix; public class QRcodeEncode { public static void main(String[] args) {
try {
//二维码内容
String content = "Hello QRcode!";
//二维码生成路径
String path = "F:/java workspace";
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Map hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, , ,hints);
File file1 = new File(path,"test.jpg");
ImageWrite.writeToFile(bitMatrix, "jpg", file1);
System.out.println("二维码已生成!");
} catch (IOException e) {
e.printStackTrace();
} catch (WriterException e) {
e.printStackTrace();
}
}
}
结果:二维码图片所在位置:F:/java workspace/test.jpg 扫描内容:Hello QRcode!

这里简单的介绍了利用java开发二维码的两种方式,当然还可以向二维码中添加logo,实现方式后续介绍。

两个jar包可关注我公众号ChaoYoung,回复“jar包”直接获取。
转载请注明:http://www.cnblogs.com/xch-yang/p/5475869.html
更多技术干货,欢迎关注我的公众号:ChaoYoung
java二维码开发的更多相关文章
- 【转】Android平台下利用zxing实现二维码开发
http://www.cnblogs.com/dolphin0520/p/3355728.html 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描 ...
- Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- (转载)Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数 ...
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- Java二维码生成与解码
基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> &l ...
- [二维码开发]二维码开发入门级demo
最近开发一个项目,涉及到二维码开发,于是乎就到网上找下直接可用的资源,遇到两个问题: 1.网上资源不够完整,找到完整的资源,需要下载分,这个你知道的 2.ThoughtWorks.QRCode版本不对 ...
- Android开发 QRCode二维码开发第三方框架
前言 Android开发里二维码开发经常用到,这里简单的介绍下Android开发里的二维码. 最广泛使用的二维码库zxing zxing是最广泛的二维码库各个平台都可以适用它,但是Android平台使 ...
- [转]java二维码生成与解析代码实现
转载地址:点击打开链接 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1. 高密度编码,信息容量大 可容纳多达1850个大 ...
随机推荐
- java基础之代理
代理的定义,代理的应用,代理的特性
- roleManager 元素(ASP.NET 设置架构),我是因为SSL弱密码(转)
为角色管理配置应用程序. 此元素是 .NET Framework 2.0 版中的新元素. configuration 元素(常规设置架构) system.web 元素(ASP.NET 设置架构) ...
- NFS(网络文件系统)
http://baike.baidu.com/subview/44349/16134489.htm
- Base64加密解密
/// <summary> /// 实现Base64加密解密 /// </summary> public sealed class Base64 { /// <summa ...
- .NET中应用Ueditor(富文本编辑)的配置和使用
一.Ueditor的下载 1.百度编辑器下载地址:http://ueditor.baidu.com/website/download.html 2.下载完整源码包,解压到任意目录,解压后的源码目录结构 ...
- mongodb数据文件内部结构
有人在Quora上提问:MongoDB数据文件内部的组织结构是什么样的.随后10gen的工程师Jared Rosoff出来做了简短的回答. 每一个数据库都有自己独立的文件.如果你开启了director ...
- table超过30个字段如何处理呢? bootstrap
样式: @media (max-width: 768px) { .table-supplier { width: 100%; height: 100%; margin-bottom: 12.75px; ...
- gitolite随记
1.git clone源码 git clone git://github.com/sitaramc/gitolite 2.安装 gitolite/install -ln 3.建立git仓库 gitol ...
- PDO事务管理DEMO
try { $dsn = "mysql:host=127.0.0.1;port=3306;dbname=dab"; $pdo = new PDO($dsn, 'root', '') ...
- C/C++ 中##(两个井号)和#(一个井号)用法
##(两个井号)和#(一个井号)都是什么意思 连接符 ##(两个井号) 不知道什么符 #(一个井号) ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成 ...