java有很多生成二维码的方式,这里介绍一下用qrcode和zixing生成的代码
前期准备工作(包括相关工具或所使用的原料等)QRCode.jar和Qrcode_swetake.jar,zixing.jar包下载 详细的操作方法或具体步骤
先去下载QRCode要用到的jar包
把这2个jar包添加到项目组,如果用到了maven的话,就可以直接在里面引用地址了,两种方式任何一种都可以,只要添加正确。


下面开始写代码
package com.wmsDemo.QRCode;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
public class QRCodeEncoderHandler {
public void encoderQRCode(String content, String imgPath) {
try {
Qrcode qrcodeHandler=new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('H');
qrcodeHandler.setQrcodeEncodeMode('B');
qrcodeHandler.setQrcodeVersion(5);
System.out.println(content);
// int imgSize=67 + 12 * (size - 1);
byte[] contentBytes=content.getBytes("gb2312");
BufferedImage bufImg=new BufferedImage(115, 115,
BufferedImage.TYPE_INT_RGB);
Graphics2D gs=bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, 115, 115);
// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量 不设置可能导致解析出错
int pixoff=2;
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 800) {
boolean[][] codeOut=qrcodeHandler.calQrcode(contentBytes);
for (int i=0; i < codeOut.length; i++) {
for (int j=0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
System.err.println("QRCode content bytes length="
+ contentBytes.length + " not in [ 0,120 ]. ");
}
gs.dispose();
bufImg.flush();
File imgFile=new File(imgPath);
// 生成二维码QRCode图片
ImageIO.write(bufImg, "png", imgFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//取当前时间为图片名称 带毫秒的
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMddHHmmssSSS" );
Date d=new Date();
String str=sdf.format(d);
String imgPath="D:/QRCode/twocode/"+str+".png";
String content="这是测试";
QRCodeEncoderHandler handler=new QRCodeEncoderHandler();
handler.encoderQRCode(content, imgPath);
System.out.println("imgPath:"+imgPath);
System.out.println("encoder QRcode success");
}
}



上面就是qrcode生成二维码的方式了,下面介绍下用zixing生成二维码的方式。

package com.wmsDemo.QRCode;
import com.google.zxing.common.BitMatrix;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;
public final class MatrixToImageWriter {
private static final int BLACK=0xFF000000;
private static final int WHITE=0xFFFFFFFF;
private MatrixToImageWriter() {}
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=0; x < width; x++) {
for (int y=0; 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);
}
}
}
package com.wmsDemo.QRCode;
import java.io.File;
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.common.BitMatrix;
public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args){
try {
String content="这是测试xing二维码生成";
// String path="D:/tt";
String path="D:/java/apache-tomcat-7.0.47/webapps/wmsDemo/QRCode";
MultiFormatWriter multiFormatWriter=new MultiFormatWriter();
Map hints=new HashMap();
//内容所使用编码
hints.put(EncodeHintType.CHARACTER_SET, "gb2312");
BitMatrix bitMatrix=multiFormatWriter.encode(content,BarcodeFormat.QR_CODE, 200, 200, hints);
//生成二维码
File outputFile=new File(path,"14.jpg");
MatrixToImageWriter.writeToFile(bitMatrix, "jpg", outputFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}

通过上面的main方法测试可以看到二维码已经生成成功,并且扫描成功,好多参数如果有需要可以自己去设置

注意事项注意编码格式经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
