前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Graphics2D写入图片内容

Graphics2D写入图片内容

原创
作者头像
Java king
发布2023-02-21 15:13:26
5750
发布2023-02-21 15:13:26
举报
文章被收录于专栏:后端Java

碰到一个证书颁发的需求,要求是啥呢,提供一个模板,给模板填充文字。

这个需求其实也很常见,java.awt中的Graphics2D就可以完成我目前所有的需求。

例如:填充图片文字(不损失模板帧数的前提下)、给文字设置字体大小、设置字体颜色等

Graphics2D统统可以实现。

Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一Graphics2D类,它拥用更强大的二维图形处理能力,提供、坐标转换、颜色管理以及文字布局等更精确的控制。

Graphics2D定义了几种方法,用于添加或改变图形的状态属性。可以通过设定和修改状态属性,指定画笔宽度和画笔的连接方式;设定平移、旋转、缩放或修剪变换图形;以及设定填充图形的颜色和图案等。图形状态属性用特定的对象储存。

当然了Graphics2D的功能不止于此,如果有类似的需求也可以仔细研究一下。

代码语言:java
复制
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

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

/**
 * @author King<fsyvip666 @ gmail.com>
 * @date 2022年06月10日 13:38
 */

@Component
public class PictureWriteUtil {
    private static final Logger log = LoggerFactory.getLogger(InvoicingHttpsUtils.class);

    /**
     * 写入图像内容
     *
     * @param pictureInfos :输入图片信息
     * @param filePath     :文件绝对路径
     * @return java.awt.image.BufferedImage
     * @author king<fsyvip666 @ gmail.com>
     * @date 2022/6/10 14:29
     */
    public static BufferedImage modifyImage(String filePath, List<PictureBo> pictureInfos) throws IOException {
        BufferedImage read = ImageIO.read(new File(filePath));
        if (null != read && null != pictureInfos) {
            //创建图形
            pictureInfos.forEach(info -> {
                Graphics2D finalGraphics2D = read.createGraphics();
				//设置字体颜色
                finalGraphics2D.setColor(new Color(3, 3, 3));
                //设置字体
                finalGraphics2D.setFont(new Font("黑体", Font.PLAIN, 20));
                //写入内容
                finalGraphics2D.drawString(info.getContent(), info.getRowAxis(), info.getVerticalAxis());
                //完成模板修改
                finalGraphics2D.dispose();
            });
        }
        return read;
    }

    /**
     * 把缓存图片先上传到本地随后上传oss
     *
     * @param image:缓存图片
     * @param filePath:绝对本地路径
     * @param suffix:文件后缀
     * @param userId:用户id
     * @return java.long.String : oss连接
     * @author king<fsyvip666 @ gmail.com>
     * @date 2022/6/10 14:35
     */
    public static String writeFileToOss(String filePath, BufferedImage image, String suffix, Long userId) throws IOException {
        String endPath = "user/" + userId;
        String oss = "";
        if (StringUtils.isNotEmpty(filePath) && null != image) {
            File file = new File(filePath);
            ImageIO.write(image, suffix, file);
            //根据filePath上传oss,然后拿到oss连接
            oss = StorageUtil.uploadFile(endPath, file);
            log.info("上传oss成功删除本地文件:{}", file.delete());
        }
        return oss;
    }
}
代码语言:java
复制
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author King<fsyvip666 @ gmail.com>
 * @date 2022年06月10日 13:38
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Accessors(chain = true)
public class PictureBo {
    /**
     * 写入内容
     */
    private String content;

    /**
     * 图片x轴
     */
    private Integer rowAxis;

    /**
     * 图片y轴
     */
    private Integer verticalAxis;

    /**
     * 类型:名字、日期、编号
     */
    private String type;

    /**
     * 手机号
     */
    private String phone;

}

因为写入图片内容是根据坐标写入的,所以要定义图片的坐标点写入内容。

具体业务我就不过多展示了。贴一下稍微复杂一点的业务处理吧。

效果图

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档