SpringBoot——生成二维码
1、依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.0</version>
</dependency>
2、调用者
public void createCode(OssStoreOrder resources) {
JSONObject jsonObject = new JSONObject();
if (resources.getStoreId() != null && resources.getStatus() == 6) {
jsonObject.put("userId", resources.getUid());
jsonObject.put("storeId", resources.getStoreId());
jsonObject.put("orderId", resources.getOrderId());
}
Integer width = 200;
Integer height = 200;
resources.setVerifyCode(qrCodeUtil.zxingCodeCreate(jsonObject.toJSONString(), width, height));
storeOrderMapper.updateById(resources);
}
3、工具类
package com.sleepfish.shop.order.code;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.sleepfish.activiti.domain.QiniuContent;
import com.sleepfish.activiti.service.QiNiuService;
import com.sleepfish.common.core.domain.entity.SysUser;
import com.sleepfish.modules.user.OssUser;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Repository;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
@Repository
public class QRCodeUtil {
@Resource
private QiNiuService qiNiuService;
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
public String zxingCodeCreate(String text, int width, int height) {
Map<EncodeHintType, String> his = new HashMap<EncodeHintType, String>();
his.put(EncodeHintType.CHARACTER_SET, "utf-8");
try {
BitMatrix encode = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, his);
int codeWidth = encode.getWidth();
int codeHeight = encode.getHeight();
BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < codeWidth; i++) {
for (int j = 0; j < codeHeight; j++) {
image.setRGB(i, j, encode.get(i, j) ? BLACK : WHITE);
}
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
MultipartFile multipartFile = new MockMultipartFile("temp.jpg", "temp.jpg", "", is);
System.err.println(is);
QiniuContent upload = qiNiuService.upload(multipartFile, qiNiuService.find());
return upload.getUrl();
} catch (WriterException e) {
e.printStackTrace();
System.out.println("二维码生成失败");
} catch (IOException e) {
e.printStackTrace();
System.out.println("生成二维码图片失败");
}
return null;
}
}