/**
* 生成二维码图片
*/
@RequestMapping(value = "/markQRCode")
public String markQRCode(Integer userId, HttpServletRequest request, Model model){
User user = userService.queryById(userId);
if(StringUtils.isEmpty(user.getQrCode())){
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + PropertyUtil.getProperty("basePath") + "/" + "d_sys_user";
// 组装文件存储路径(图片保存至服务器端)
Map<String, String> map = SpringContextHolder.getBean("fileDir");
String baseDir = map.get("baseDir");
String uploadRealRath = baseDir + File.separator + "d_sys_user";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(new Date());
String filePath = uploadRealRath + File.separator + dateStr + File.separator + "code";
String image = user.getUserId() + ".png";
String qrCode = basePath + "/" + dateStr + "/" + "code" + "/" + image;
String file = filePath + File.separator + image;
FileUtils.createDirectory(filePath);
String ermPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+"/user/queryAppDetail?userId="+user.getUserId();
QrCode.generateQRCode(ermPath, 10, file);
user.setQrCode(qrCode);
user.setModifiedStaffId(this.getCurrentStaffId());
user.setModifiedTime(DateUtil.format(new Date(), DateUtil.DATE_FORMAT));
userService.updateData(user);
model.addAttribute("qrCode", qrCode);
}else{
model.addAttribute("qrCode", user.getQrCode());
}
return PathUtil.FRONT_PATH+"user/user_browse";
}
public static boolean createDirectory(String descDirName) {
String descDirNames = descDirName;
if (!descDirNames.endsWith(File.separator)) {
descDirNames = descDirNames + File.separator;
}
File descDir = new File(descDirNames);
if (descDir.exists()) {
log.debug("目录 " + descDirNames + " 已存在!");
return false;
}
// 创建目录
if (descDir.mkdirs()) {
log.debug("目录 " + descDirNames + " 创建成功!");
return true;
} else {
log.debug("目录 " + descDirNames + " 创建失败!");
return false;
}
}
*/
public static String generateQRCode(String qrData, int size, String imgPath,HttpServletRequest request){
try {
Qrcode qrcodeHandler = new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('H');
qrcodeHandler.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
int imgSize = 67 + 12 * (size - 1);
// byte[] contentBytes = content.getBytes("UTF-8");
BufferedImage 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 < 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 ]. ");
// }
byte[] d = qrData.getBytes("UTF-8");
if(d.length > 0 && d.length <120){
boolean[][] s = qrcodeHandler.calQrcode(d);
for(int i=0;i<s.length;i++){
for(int j=0;j<s.length;j++){
if(s[j][i]){
gs.fillRect(j*3+pixoff, i*3+pixoff, 3, 3);
}
}
}
}
//中间插入logo
int width_4 = imgSize / 4;
int width_8 = width_4 / 2;
int height_4 = imgSize / 4;
int height_8 = height_4 / 2;
String logoPath = request.getSession().getServletContext().getRealPath("resources")+File.separator+"images"+File.separator+"wx_logo.png";
//String logoPath = imgPath;
Image img = ImageIO.read(new File(logoPath));
//gs.drawImage(img, (imgSize-30)/2, (imgSize-30)/2, 30, 30, null);
gs.drawImage(img, width_4 + width_8, height_4 + height_8,width_4,height_4, null);
//插入logo结束
gs.dispose();
bufImg.flush();
File imgFile = new File(imgPath);
// 生成二维码QRCode图片
ImageIO.write(bufImg, "png", imgFile);
} catch (Exception e) {
e.printStackTrace();
}
return imgPath;
}