看效果图
package com.hxx.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
public class HxxCodeUtils {
private static final int QRCOLOR = 2105119;
private static final int BGWHITE = 16777215;
private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
private static final long serialVersionUID = 1L;
{
this.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
this.put(EncodeHintType.CHARACTER_SET, "utf-8");
this.put(EncodeHintType.MARGIN, 0);
}
};
public HxxCodeUtils() {
}
public static void CreatQRCode(File codeFile, File bgImgFile, Integer WIDTH, Integer HEIGHT, String qrUrl, String note, String tui, Integer size, Integer imagesX, Integer imagesY, Integer text1X, Integer text1Y, Integer text2X, Integer text2Y) {
try {
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
BitMatrix bm = multiFormatWriter.encode(qrUrl, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints);
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, 1);
int y;
for(int x = 0; x < WIDTH; ++x) {
for(y = 0; y < HEIGHT; ++y) {
image.setRGB(x, y, bm.get(x, y) ? 2105119 : 16777215);
}
}
BufferedImage backgroundImage = ImageIO.read(bgImgFile);
y = backgroundImage.getWidth();
int qrWidth = image.getWidth();
int disx = y - qrWidth - imagesX;
int disy = imagesY;
Graphics2D rng = backgroundImage.createGraphics();
rng.setComposite(AlphaComposite.getInstance(10));
rng.drawImage(image, disx, disy, WIDTH, HEIGHT, (ImageObserver)null);
Color textColor = Color.white;
rng.setColor(textColor);
rng.drawImage(backgroundImage, 0, 0, (ImageObserver)null);
rng.setFont(new Font("微软雅黑,Arial", 1, size));
rng.setColor(Color.black);
int strWidth = rng.getFontMetrics().stringWidth(note);
int disx1 = y - strWidth - text1X;
rng.drawString(note, disx1, text1Y);
int disx2 = y - strWidth - text2X;
rng.drawString(tui, disx2, text2Y);
rng.dispose();
backgroundImage.flush();
ImageIO.write(backgroundImage, "png", codeFile);
} catch (Exception var27) {
var27.printStackTrace();
}
}
//这个 你可以直接测试 生成、二维码在海报的位置你自己需要自己调
public static void main(String[] args) {
File bgImgFile = new File("D:/silly/lu2.jpg");//背景图片
File QrCodeFile = new File("D:/silly/7.jpg");//生成图片位置
String url = "http://silly.nat300.top/api/wx/login?parent_id=7";//二维码链接
String note = "龙虎斗";//文字描述
String tui = "龙虎斗";//文字描述
//宣传二维码生成
//生成图地址,背景图地址,二维码宽度,二维码高度,二维码识别地址,文字描述1,文字描述2,文字大小,图片x轴方向,图片y轴方向,文字1||2xy轴方向
HxxCodeUtils.CreatQRCode(QrCodeFile, bgImgFile, 75, 75, url, note, tui, 20, 125, 420, 0, 0, 410, 210);
}
}
把上面作为工具类就可以了 这个生成图片后回显到浏览器 海报推广码就生成了
package longhudou.controller.wx;
import com.hxx.utils.BaseController;
import com.hxx.utils.HxxCodeUtils;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @ClassName HuangXiangXiang
* @Date 2019/11/16 17:24
* @Version V1.0
**/
public class QRCodeController extends BaseController {
public void QRCreate() throws IOException {
String parentId = get("parent_id");
File bgImgFile = new File("D:/silly/lu2.jpg");//背景图片
File QrCodeFile = new File("D:/silly/7.jpg");//生成图片位置
String url = "http://silly.nat300.top/api/wx/login?parent_id=7";//二维码链接
String note = "龙虎斗";//文字描述
String tui = "龙虎斗";//文字描述
//宣传二维码生成
//生成图地址,背景图地址,二维码宽度,二维码高度,二维码识别地址,文字描述1,文字描述2,文字大小,图片x轴方向,图片y轴方向,文字1||2xy轴方向
HxxCodeUtils.CreatQRCode(QrCodeFile, bgImgFile, 75, 75, url, note, tui, 20, 125, 420, 0, 0, 410, 210);
ServletOutputStream out = null;
FileInputStream ips = null;
HttpServletResponse response = getResponse();
//获取图片存放路径
String imgPath = "D:/silly/7.jpg";
ips = new FileInputStream(new File(imgPath));
getResponse().setContentType("image/jpg");
out = response.getOutputStream();
//读取文件流
int len = 0;
byte[] buffer = new byte[1024 * 10];
while ((len = ips.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
renderNull();
}
}
使用到的pom
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>