前段时间没事突然看到有些宣传海报上面打印了带log的二维码,于是在网上查找了生成二维码的方法,自己进行了写修改,下面直接贴出代码供参考:
注:要引入QRCode.jar包
1、这是生成二维码的处理类:QRCodeEncoderHandler
package com.czp.commonutil;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.czp.QRCode.pro.TwoDimensionCodeImage;
import com.czp.logQRcode.LogoConfig;
import com.czp.logQRcode.MatrixToImageWriter;
import com.czp.util.CommonUtil;
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;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.swetake.util.Qrcode;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
public class QRCodeEncoderHandler {
/**
* 生成二维码(QRCode)图片的公共方法
* @param content 存储内容
* @param imgType 图片类型
* @param size 二维码尺寸
* @param addLog 是否添加log
* @param addText 添加的文字
* @return
*/
@SuppressWarnings("unchecked")
public synchronized static String qRCodeCommon(String content, String imgType, int size,Boolean addLog,String addText) {
final String uploadRootDir="D:/temp/";//临时文件夹
final String uploadPathImg="D:/imgfile";//存储文件夹
final String path = "E:/QRCodeImage";//存放logo的文件夹
String fileDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
String name=CommonUtil.getSysFormatTime("yyyyMMddHHmmssSSS").toString();//图片名称
final String uploadPath =uploadPathImg+ "/"+fileDate+"/";//+priBankCode+"/"
BufferedImage bufImg = null;
String fileNamePath=uploadPath+"";//返回生成二维码路径、名称
int imgSize=1;
//size = 2;
try {
Qrcode qrcodeHandler = new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
// 获得内容的字节数组,设置编码格式
byte[] contentBytes = content.getBytes("utf-8");
// 图片尺寸
imgSize = 67 + 12 * size;
System.out.println("imgSize:"+imgSize);
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
// 设置背景颜色
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);
// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量,不设置可能导致解析出错
int pixoff = 2;
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 200) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i <