需求
用户输入需要生成的二维码数量及相关信息,后台进行生成并打包后返回给用户。二维码示例如下:
思路
1.二维码生成及添加背景图;
2.将logo覆盖至生成的二维码上(注意大小不能超过10%,否则二维码可能无法识别);
3.添加编码的水印。
实现
借助工具类处理已有图片和相关操作
/**
* 生成二维码图片
* @param qrCodeOrderEntity
* @param qrCodeItemEntity
*/
public String genLabelPicture(QrCodeOrderEntity qrCodeOrderEntity, QrCodeItemEntity qrCodeItemEntity) {
String picurl = fileUrl;
try {
// 生成二维码
String twopath = filePath + qrCodeOrderEntity.getId() + "//" + qrCodeItemEntity.getId() + ".png";
if (!FileUtil.isDirectory(twopath)) {
FileUtil.mkParentDirs(twopath);
}
QRCodeUtil.encode(qrCodeItemEntity.getContent(), 914, 917, twopath, qrCodeOrderEntity.getLogo_url());
/** begin--添加背景 **/
String saveFilePath = filePath + qrCodeOrderEntity.getId() + "//" + qrCodeItemEntity.getId() + "1.png";
NewImageUtils newImageUtils = new NewImageUtils();
BufferedImage buffImg = NewImageUtils.watermark(new File(waterFilePath), new File(twopath), 140, 140, 1.0f);
newImageUtils.generateWaterFile(buffImg, saveFilePath);
// 删除原来的图片并重命名新的图片
com.xakj.util.FileUtil.renameFile(filePath + qrCodeOrderEntity.getId(), qrCodeItemEntity.getId() + "1.png", qrCodeItemEntity.getId() + ".png");
/** end--添加背景 **/
/** begin--添加水印 **/
Font font = new Font("微软雅黑", Font.PLAIN, 150); // 水印字体
String waterMarkContent = qrCodeItemEntity.getId(); // 水印内容
Color color = new Color(255, 255, 255, 255); // 水印图片色彩以及透明度
new WaterMarkUtils().addWaterMark(twopath, saveFilePath, waterMarkContent, color, font);
// 删除原来的图片并重命名新的图片
com.xakj.util.FileUtil.renameFile(filePath + qrCodeOrderEntity.getId(), qrCodeItemEntity.getId() + "1.png", qrCodeItemEntity.getId() + ".png");
/** end--添加水印 **/
} catch (Exception e) {
e.printStackTrace();
}
return picurl;
}