经常看到一些二维码,感到好奇,自己也就学习写了个生成二维码的程序玩玩。
主要用到Qrcode_swetake.jar这个jar包来实现把传进来的String类型数据转换为byte[][]的二位数组类型。最后生成二维码图片。
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.UnsupportedEncodingException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
/**
* @className:Qrcode
* @Desription:二维码生成系统
* @author zhaoxu
* @date 2017年11月6日 晚上9:44
*/
public class ErWeiMa {
public static void main(String args[]){
long start = (System.currentTimeMillis())%10000000;//使得生成的图片名称不一样
//写入内容参数和图片所存的地址
QrcodeImg("这里填写传入的内容或者网址","F:/erweima/"+start+".png");
}
/**
* @Title QrcodeImg
* @Description 二维码生成核心方法
* @param content
* @param imgPath 设定文件
*/
public static void QrcodeImg(String content,String imgPath){
//实例化一个Qrcode对象
Qrcode qrcode = new Qrcode();
//设置二维码的排错率 18%的空间存放错误信息
qrcode.setQrcodeErrorCorrect('M');
//编码
qrcode.setQrcodeEncodeMode('B');
//版本
qrcode.setQrcodeVersion(7);
//设置大小
int width = 140;
int height = 140;
//开始绘制---->画板
BufferedImage bf = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//绘制工具
Graphics2D gs = bf.createGraphics();
//设置背景颜色
gs.setBackground(Color.white);
//设置绘制区域
gs.clearRect(0, 0, width, height);
//设置画笔颜色
gs.setColor(Color.black);
//正式绘制 根据内容绘制
//把传进来的string内容转变成比优特型,然后放进二位Boolean数组中
try {
byte[] contentByte = content.getBytes("utf-8");
boolean[][] codesOut = qrcode.calQrcode(contentByte);
//拿到二维码中所有的内容进行判断
//if (contentByte.length > 0 && contentByte.length < 123){
for(int i = 0;i<codesOut.length;i++){
for(int j = 0;j<codesOut.length;j++){
if(codesOut[j][i]){
//如果在当前位置,就把当前位置涂黑
gs.fillRect(j*3+2, i*3+2, 3, 3);//前面两个参数是每次x y轴的坐标,后面两个参数是每次正方形的大小
}
}
}
gs.dispose();
//文件输出
File imageFile = new File(imgPath);
ImageIO.write(bf, "png", imageFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}