工具类:

package com.mchweb.common.utils.image;

import com.google.common.collect.Lists;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class ImageMergedUtil {

    /**
     * 合成图片并添加文字
     *
     * @param outFile 最终合成文件
     */
    public static void merged(File targetImage, List<ImgMergeVO> imgMergeVOList, List<ImgFontVO> imgFontVOList, File outFile) throws IOException {
        // 加载模版图片
        BufferedImage imageLocal = ImageIO.read(targetImage);
        Graphics2D g = null;
        // 加载叠加图片
        if (imgFontVOList != null) {
            for (ImgMergeVO imgMerge : imgMergeVOList) {
                BufferedImage imageCode = ImageIO.read(imgMerge.getMergedImage());
                g = imageLocal.createGraphics();
                // 在模板上添加叠加图片(地址,左边距,上边距,图片宽度,图片高度,未知)
                g.drawImage(imageCode, imgMerge.getLeft(), imgMerge.getTop(), imgMerge.getWidth(), imgMerge.getHeight(), null);
            }
        }

        // 添加文本说明
        if (imgFontVOList != null) {
            for (ImgFontVO imgFont : imgFontVOList) {
                // 设置文本样式
                g.setFont(imgFont.getFont());
                g.setColor(imgFont.getColor());
                g.drawString(imgFont.getText(), imgFont.getLeft(), imgFont.getTop());
            }
        }
        g.dispose();// 完成模板修改
        ImageIO.write(imageLocal, "png", outFile);
    }
}


文字对象类:

package com.mchweb.common.utils.image;

import lombok.*;
import lombok.experimental.Accessors;

import java.awt.*;

@Getter
@Setter
@Accessors(chain = true)
public class ImgFontVO {

    private String text;

    private Font font;

    private int left;

    private int top;

    private Color color;

    public ImgFontVO() {
        this.color = Color.BLACK;
        this.font = new Font("PingFangSC-Regular", Font.PLAIN, 35);
    }

    public ImgFontVO(String text, int left, int top, Font font, Color color) {
        this();
        this.text = text;
        this.font = font;
        this.left = left;
        this.top = top;
        this.color = color;
    }

    public ImgFontVO(String text, int left, int top, Font font) {
        this();
        this.text = text;
        this.font = font;
        this.left = left;
        this.top = top;
    }

    public ImgFontVO(String text, int left, int top) {
        this();
        this.text = text;
        this.left = left;
        this.top = top;
    }

    public ImgFontVO(String text, int left, int top, Color color) {
        this();
        this.text = text;
        this.left = left;
        this.top = top;
        this.color = color;
    }
}


图片对象类:

package com.mchweb.common.utils.image;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.File;

@Getter
@Setter
@Accessors(chain = true)
@Builder(toBuilder = true)
public class ImgMergeVO {

    //private File targetImage;
    private File mergedImage;
    private int left;
    private int top;
    private int width;
    private int height;

    public ImgMergeVO() {
        this.width = 30;
        this.height = 30;
    }

    public ImgMergeVO(File mergedImage, int left, int top) {
        this();
        //this.targetImage = targetImage;
        this.mergedImage = mergedImage;
        this.left = left;
        this.top = top;
    }

    public ImgMergeVO(File mergedImage, int left, int top, int width, int height) {
        this();
        //this.targetImage = targetImage;
        this.mergedImage = mergedImage;
        this.left = left;
        this.top = top;
        this.width = width;
        this.height = height;
    }
}


测试案例:

package com.mchweb.common.utils.image;

import com.google.common.collect.Lists;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        File targetImage = new File("C:/1111.png");
        File mergedImage = new File("C:/22.png");
        File outputfile = new File("C:/AAA.png");
        Font font = new Font("PingFangSC-Regular", Font.PLAIN, 35);
        java.util.List<ImgFontVO> imgFontVOList = Lists.newArrayList();
        imgFontVOList.add(new ImgFontVO("XXXX", 20, 100, font));
        imgFontVOList.add(new ImgFontVO("XXXX", 20, 200, font));
        imgFontVOList.add(new ImgFontVO("XXXX", 20, 300, font));
        imgFontVOList.add(new ImgFontVO("XXXX", 20, 400, font));

        List<ImgMergeVO> imgMergeVOList = Lists.newArrayList();
        imgMergeVOList.add(new ImgMergeVO(mergedImage, 10, 100));
        imgMergeVOList.add(new ImgMergeVO(mergedImage, 10, 200));
        imgMergeVOList.add(new ImgMergeVO(mergedImage, 10, 300));

        try {
            ImageMergedUtil.merged(targetImage, imgMergeVOList, imgFontVOList, outputfile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}