1.导入依赖
<!--生成二维码-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
2.工具
/**
* @ClassName ImageUtil
* @Description TODO
* @Author Uncle
* @Date 2020/09/28 23:31
* @Version 1.0
*/import cn.hutool.extra.qrcode.QrCodeUtil;import cn.hutool.extra.qrcode.QrConfig;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import org.apache.commons.io.IOUtils;import org.springframework.core.io.DefaultResourceLoader;import org.springframework.core.io.ResourceLoader;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;/**
* @author Uncle
* @Description TODO 在图片上生成二维码并且在图片上添加文字 保存指定地址文件名
* @Date 2020-09-30 10:42
*/public class ImageUtil { /**
* @author Uncle
* @Description TODO 在一张背景图上添加二维码
* @Date 2020-09-28 23:59
* @param content 二维码内容
* @param written 文字内容
* @param fielPath 保存文件 例: d:/1.png
* @param hbPath 海报图片地址 例: d:/1.png
* @param logoPath 二维码logo
* @return
*/
public static void drawString(String content, String written, String fielPath, String hbPath, String logoPath) throws Exception {
BufferedImage image = addWater(content, hbPath, logoPath);
Graphics2D gd = image.createGraphics(); // 3、设置对线段的锯齿状边缘处理
gd.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); // 5、设置水印文字颜色
gd.setColor(Color.black); // 6、设置水印文字Font
gd.setFont(new Font("黑体", Font.BOLD, 40)); // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
gd.drawString(written, 295, 988);
gd.dispose();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
ImageIO.write(image, "png", imOut);
InputStream inputStream = new ByteArrayInputStream(bs.toByteArray());
OutputStream outStream = new FileOutputStream(fielPath);
IOUtils.copy(inputStream, outStream);
inputStream.close();
outStream.close();
} /***
* 在一张背景图上添加二维码
*/
public static BufferedImage addWater(String content, String hbPath, String logoPath) throws Exception { // 读取原图片信息
//得到文件
File file = new File(hbPath); //文件转化为图片
Image srcImg = ImageIO.read(file); //获取图片的宽
int srcImgWidth = srcImg.getWidth(null); //获取图片的高
int srcImgHeight = srcImg.getHeight(null); // 加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null); //使用工具类生成二维码
Image image = createQrCode(content, 226, 226, logoPath); //将小图片绘到大图片上,500,300 .表示你的小图片在大图片上的位置。
g.drawImage(image, 263, 700, null); //设置颜色。
g.setColor(Color.WHITE);
g.dispose(); return bufImg;
} private static BufferedImage createQrCode(String content, int width, int height, String logoPath) throws IOException {
QrConfig config = new QrConfig(width, height); if(logoPath!=null){
Image image = ImageIO.read(new FileInputStream(new File(logoPath)));
config.setImg(image);
}
config.setErrorCorrection(ErrorCorrectionLevel.H); return QrCodeUtil.generate(
content,
config);
} public static InputStream resourceLoader(String fileFullPath) throws IOException {
ResourceLoader resourceLoader = new DefaultResourceLoader(); return resourceLoader.getResource(fileFullPath).getInputStream();
}
}
3.测试
ImageUtil.drawString("哈哈哈哈","123123","d:\\1.png","D:\\t\\1.png","D:\\logo.png");
评论 (0)