当前位置: 首页 > article >正文

JAVA:文字写入图片、图片插入图片

一、前言

在实际应用中,需要通过Java将目标信息写在图片上,生成小卡片。

二、实现

1.定义一个工具类,代码如下:

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

public class WenZi2Pic {
    public static void main(String[] args) {
        String modelPath = "D:\\368760.jpg";
        String sourcePath = "D:\\source1.png";
        String savePath = "D:\\result1.png";
        savePic("皮卡丘,你准备好与我并肩作战,共同征服这个世界了吗?",modelPath,sourcePath,savePath);
    }


    public static void savePic(String text,String modelPath,String sourcePath,String savePath){
        try {
            //新建图片或者导入模版图片
//            BufferedImage bufImage = createImage(100,200,1);
//            g.setColor(new Color(0xDCDCDC));
//            g.setColor(Color.WHITE);
//            g.fillRect(0,0,srcImgWidth,srcImgHeight);

            BufferedImage bufImage = ImageIO.read(new File(modelPath));

            BufferedImage imageNew = new BufferedImage(bufImage.getWidth(), bufImage.getHeight(), BufferedImage.TYPE_INT_RGB);
            Graphics2D g = imageNew.createGraphics();
            g.drawImage(bufImage, 0, 0, bufImage.getWidth(), bufImage.getHeight(), null);
            //字体的平滑处理
            g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

            //设置输出字体
            Font font = new Font("楷体", Font.BOLD, 50);
            g.setFont(font);
            g.setColor(Color.BLACK);
            //写字,注意:输入的坐标为第一个字左下角坐标
            g.drawString(text, 20, 500);
            //添加图片
            BufferedImage headImage = ImageIO.read(new File(sourcePath));
            g.drawImage(headImage,500, 600,null);
            g.dispose();
            //保存图片
            OutputStream fos = new FileOutputStream(savePath);
            ImageIO.write(imageNew, "png", fos);
            bufImage.flush();
            imageNew.flush();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }


    }

    /**
     * 新建图片
     *
     * @param width     图片宽
     * @param height    图片高
     * @param imageType 图片类型
     * @return 图片实体
     */
    private static BufferedImage createImage(int width, int height, int imageType) {
        // 新建图片
        return new BufferedImage(width, height, imageType);
    }

    /**
     * 绘制背景
     * @param image    画布
     * @param graphics 画笔
     * @param bgColor  背景颜色
     */
    private static void fillBackground(BufferedImage image, Graphics graphics, Color bgColor) {
        int width = image.getWidth();
        int height = image.getHeight();
        graphics.setClip(0, 0, width, height);
        // 设置画笔颜色
        graphics.setColor(bgColor);
        // 绘制背景
        graphics.fillRect(0, 0, width, height);
    }
}

三、代码呈现效果 

输入文字:

皮卡丘,你准备好与我并肩作战,共同征服这个世界了吗?

 输入图片:

背景图片:368760.jpg

待插入图片:source1.png

 输出图片:result1.png


http://www.kler.cn/news/285217.html

相关文章:

  • 睿考网:2024年中级经济师考试备考技巧
  • Java设计模式【享元模式】-结构型
  • mac在终端中使用vscode打开文件或者文件夹
  • PowerShell脚本编写:自动化Windows开发工作流程
  • audiocraft - 免费文本转音乐、AI音乐生成、AI音乐创作工具,Facebook开源,本地一键整合包下载
  • Redisson 实现分布式锁
  • 类和对象(4)
  • zabbix对接Grafana
  • Linux的远程登录教程(超详细)
  • 排序算法之桶排序详细解读(附带Java代码解读)
  • 模型 错位竞争(战略规划)
  • 从Vuex 到 Pinia,Vue 状态管理的进化
  • HTB-sequal(mysql)
  • 十一. 常用类
  • 如何开发针对不平衡分类的成本敏感神经网络 python
  • 遇到“Interpreter parsed an intent ‘xxx‘ which is not defined in the domain“报错
  • 贵州大数据实验室建设案例分享
  • vue调用booststrap弹窗
  • 大数据-112 Flink DataStreamAPI 程序输入源 DataSource 基于文件、集合、Kafka连接器
  • Linux随记(十一)
  • android 14及android15 READ_EXTERNAL_STORAGE跟相册,视频权限的适配
  • GraphRAG 文本分割优化
  • 深度学习100问31:如何降低语言模型的困惑度
  • yolov8旋转目标检测部署教程(附代码c++_python)
  • 在Java中,获取输入内容可以通过多种方式实现,以下是三种常用的方式:Scanner、BufferedReader 和 Console 的具体代码示例
  • chromedriver下载地址
  • c# net8调用vc写的dll
  • 机械学习—零基础学习日志(如何理解概率论10)
  • 学习记录:js算法(二十):子数组最大平均数 I、无重复字符的最长子串
  • Linux(文件的查找和解压缩)