使用AWT在图片上绘制文字

一、依赖

这2个依赖都不是必备的,只不过为了方便,使用到这2个依赖包的地方可以自己重写

 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.24</version>
 </dependency>

 <dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.8.5</version>
 </dependency>

二、工具类

import cn.hutool.core.util.StrUtil;
import lombok.Builder;
import lombok.Data;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;

/**
 * @author aqi
 * @describe 图片绘制工具类
 * @since 2023/7/31 14:58
 */
@Data
@Builder
public class DrawImage {

    private Graphics2D graphics2D;

    private String backImageType;

    private BufferedImage bufferedImage;

    /**
     * 默认字体
     */
    private final static String FONT_NAME = "Microsoft YaHei";

    public static void main(String[] args) throws IOException {
        DrawImage.builder().build()
                .init("url")
                .font(40)
                .color(Color.WHITE)
                .drawString("标题标题标题", 35, 75)


                .font(70)
                .font("123", 1, 12)
                .drawString("07:00", 35, 200)
                .drawString("09:20", 360, 200)

                .font(30)
                .drawString("文本一", 35, 250)
                .drawString("文本二", 400, 250)

                .write("D:\\b.png");
    }

    /**
     * 初始化graphics2D信息
     * @param backImageFileUrl 背景图片
     */
    public DrawImage init(String backImageFileUrl) throws IOException {
        // 读取图片
        this.bufferedImage = ImageIO.read(new URL(backImageFileUrl));
        // 创建Graphics2D对象
        this.graphics2D = this.bufferedImage.createGraphics();
        this.backImageType = StrUtil.subAfter(backImageFileUrl, ".", true);
        return this;
    }

    /**
     * 设置字体,数字越大字体越大
     * @param fontSize 字体大小
     */
    public DrawImage font(int fontSize) {
        this.graphics2D.setFont(new Font(FONT_NAME, Font.PLAIN, fontSize));
        return this;
    }

    /**
     * 设置字体
     * @param fontName 字体名称
     * @param fontSize 字体大小
     */
    public DrawImage font(String fontName, int fontSize) {
        this.graphics2D.setFont(new Font(fontName, Font.PLAIN, fontSize));
        return this;
    }

    /**
     * 设置字体
     * @param fontName 字体名称
     * @param fontStyle 字体样式
     * @param fontSize 字体大小
     */
    public DrawImage font(String fontName, int fontStyle, int fontSize) {
        this.graphics2D.setFont(new Font(fontName, fontStyle, fontSize));
        return this;
    }

    /**
     * 设置字体颜色
     * @param color 颜色
     */
    public DrawImage color(Color color) {
        this.graphics2D.setColor(color);
        return this;
    }

    /**
     * 写文本
     * x,y轴以图片的左上角为零点
     * @param text 文本内容
     * @param x 文本x轴
     * @param y 文本y轴
     */
    public DrawImage drawString(String text, int x, int y) {
        this.graphics2D.drawString(text, x, y);
        return this;
    }

    /**
     * 输出图片
     */
    public void write(String writePath) throws IOException {
        // 释放资源
        this.graphics2D.dispose();
        // 输出图片
        ImageIO.write(this.bufferedImage, this.backImageType, new File(writePath));
    }

    /**
     * 输出图片
     */
    public void write(HttpServletResponse response) throws IOException {
        // 释放资源
        this.graphics2D.dispose();
        ImageIO.write(this.bufferedImage, this.backImageType, response.getOutputStream());
    }

    /**
     * 输出图片
     */
    public void write(OutputStream out) throws IOException {
        // 释放资源
        this.graphics2D.dispose();
        // 将文件上传到minio
        ImageIO.write(this.bufferedImage, this.backImageType, out);
    }


}

你可能感兴趣的:(JAVA,java)