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个大 ...
随机推荐
- matlab遗传算法
function [xv,fv] = myGA(fitness, a, b, NP, NG, Pc, Pm, eps) % 用遗传算法求解一维无约束优化问题 % % 待优化的目标函数 fitness ...
- 【hoj】1604 cable master
简单,二分法,可是在oj上交的时候会有精度的限制,所以仅仅能把数扩得大一点,并且在扩的时候为防止尾数会自己主动生成一些非零数,所以还是自己吧扩到的位置设置为0,还有输出时由于%.2lf会自己有4设5入 ...
- IOS Layer的使用
CALayer(层)是屏幕上的一个矩形区域,在每一个UIView中都包含一个根CALayer,在UIView上的所有视觉效果都是在这个Layer上进行的. CALayer外形特征主要包括: 1.层的大 ...
- hdu-1573 Robot Motion
Robot Motion Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10219 Accepted: 4977 Des ...
- iocfont 网页图标字体以及使用方法
在网页设计中使用图标字体(icon font)是件挺有新意的事情,使用图标字体能我们带来了一定的方便,比如在移动设备.Retina屏幕效果展示.兼容IE6/7浏览器以及能任意将图标放大缩小等,这些都是 ...
- easyUI的doCellTip 就是鼠标放到单元格上有个提示的功能
1:这个东西是我抄的(抄的哪儿的我就想不起来了- -)弹出的窗没有样式 不是很好看 //扩展 $.extend($.fn.datagrid.methods, { /** * 开打提示功能 * @pa ...
- iOS_SN_push/pop转场动画封装和一般动画封装
封装类中的方法: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface AnimationE ...
- Selenium webdriver 截图 太长截不全的问题
Selenium webdriver 截图 太长截不全的问题 1.环境 selenium webdriver.net 2.46.0.0 + firefox 37.0.1 + win 8.1 2.问题 ...
- java递归删除指定目录下的文件和文件夹
public static boolean deleteFolder(String delDir) { File delFolder = new File(delDir); File[] delFil ...
- JedisPool操作
Jedis 使用 commons-pool 完成池化实现. 先做个配置文件(properties文件): #最大分配的对象数 redis.pool.maxActive=1024 #最大能够保持idel ...