Java 图片合成

前序

本周接到了新项目中的一个需求:根据给定的内容合成一张图片,需求如下:

  1. 标题自动换行,如果标题中出现英文单词时,以单词为最小单元进行换行。
  2. 如果行数超过5行省略用 … 代替。
  3. 符号是下一行首字母时,自动截留到上一行末尾。
  4. 空格为下一行开头,则删除空格,显示单词,保持内容左对齐
技术栈(JAI)

Java Advanced Imaging (JAI) 是一个用于处理图像的开源Java库。它提供了一个框架,可以用来访问各种图像源,包括本地文件系统、网络资源以及数据库等,并可以对这些图像进行转换和分析。

优点:JDK 自带内容,操作简单,不用引入新的依赖。

代码概述

本功能通过加载本地的背景图片和传入的参数进行图片的合成。主要包含了背景图、二维码插图和文本内容。其中二维码插图通过 HuTool 工具包提供生成方法。

具体代码

QrCodeImageConfig.java(二维码插图配置类)

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

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

/**
 * 插图参数
 */
@Getter
@Slf4j
public class QrCodeImageConfig {
   
    /**
     * 二维码内容
     */
    private final String text;
    /**
     * 二维码宽度
     */
    private final Integer width;
    /**
     * 二维码高度
     */
    private final Integer height;
    /**
     * 二维码颜色
     */
    private final Color color;
    /**
     * 二维码图片接收对象
     */
    private final File qrCodeImgFile;
    /**
     * JAI 图片对象
     */
    private final BufferedImage qrCodeBuffer;

    /**
     * 构造函数
     *
     * @param text 二维码内容
     * @param width 二维码宽度
     * @param height 二维码高度
     * @param color 二维码颜色
     * @param qrCodeImg 二维码图片接收对象
     */
    public QrCodeImageConfig(String text, Integer width, Integer height, Color color, File qrCodeImg) {
   
        if (StringUtils.isBlank(text) || width == null || height == null || color == null || qrCodeImg == null) {
   
            throw new IllegalArgumentException("QrCodeImageParam.QrCodeImageParam 参数异常");
        }
        this.color = color;
        this.width = width;
        this.height = height;
        this.text = text;
        this.qrCodeImgFile = qrCodeImg;
        try {
   
            QrConfig config = new QrConfig(width, height);
            config.setBackColor(color);
            config.setMargin(1);
            QrCodeUtil.generate(text, config, qrCodeImg);
            this.qrCodeBuffer = ImageIO.read(qrCodeImg);
        } catch (IOException e) {
   
            throw new RuntimeException("QrCodeImageParam.QrCodeImageParam2 二维码图片配置创建异常");
        }
    }

    /**
     * 获取图片高度
     */
    public int getImageHeight() {
   
        return qrCodeBuffer.getHeight();
    }

    /**
     * 获取图片宽度
     */
    public int getImageWidth() {
   
        return qrCodeBuffer.getWidth();
    }
}

TextConfig.java(文本内容配置类)

import lombok
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值