1、图片模板示例

2、Java代码(简版)

public static void main(String[] args) throws FileNotFoundException, IOException {
int width = 820; // 图片宽
int height = 600;// 图片高
String titleStr = "公司测试点";
String zhangdanzhouqiStr = "2019年2月1日至2019年2月28日"; // 账单周期
String zhangdantianshuStr = "85天"; // 账单天数
String bengedinggonglvStr = "1000KW";// 泵额定功率
String bengbianpingjienengyunxingyongdianliangStr = "100度"; // 泵变频节能运行用电量
String dianjiaStr = "100元/度"; // 电价
String pingjunjienenglvStr = "50%";// 平均节能率
String daizhifujingeStr = "1000元"; // 待支付金额
String bengyunxingzongshichangStr = "200小时"; // 泵运行总时长
String benggongping运行yongdianliangStr = "99度"; // 泵工频运行用电量
String jieshengdianliangStr = "100度"; // 节省电量
String jieshengjineStr = "1000元"; // 节省金额 // 得到图片缓冲区
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// INT精确度达到一定,RGB三原色,高度70,宽度150 // 得到它的绘制环境(这张图片的笔)
Graphics2D g2 = (Graphics2D) bi.getGraphics();
g2.setColor(Color.WHITE); // 设置背景颜色
g2.fillRect(0, 0, width, height);// 填充整张图片(其实就是设置背景颜色)
g2.setColor(Color.black);// 设置字体颜色
g2.setStroke(new BasicStroke(2.0f)); // 边框加粗
g2.drawRect(1, 1, width - 2, height - 2); // 画边框就是黑边框 g2.drawLine(0, 80, 820, 80); // 从上到下第二个横线(标题下面横线)
g2.setStroke(new BasicStroke(0.0f)); // 边框不需要加粗
g2.drawLine(0, 154, 820, 154); // 从上到下第三个横线(账单周期下面横线)
g2.drawLine(0, 228, 820, 228); // 从上到下第四个横线(账单天数下面横线)
g2.drawLine(0, 302, 820, 302); // 从上到下第5个横线(泵额定功率下面横线)
g2.drawLine(0, 376, 820, 376); // 从上到下第6个横线(泵变频节能运行用电量下面横线)
g2.drawLine(0, 451, 820, 451); // 从上到下第7个横线(电价下面横线)
g2.drawLine(0, 525, 820, 525); // 从上到下第8个横线(平均节能率下面横线) g2.drawLine(180, 80, 180, 600); // 从左到右第二个竖线
g2.drawLine(390, 154, 390, 451); // 从左到右第三个竖线
g2.drawLine(574, 154, 574, 451); // 从左到右第四个竖线 // 设置标题的字体,字号,大小
Font titleFont = new Font("宋体", Font.BOLD, 30);
g2.setFont(titleFont);
String markNameStr = titleStr;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿
// 计算文字长度,计算居中的X点坐标
FontMetrics fm = g2.getFontMetrics(titleFont);
int titleWidth = fm.stringWidth(markNameStr);
int titleWidthX = (width - titleWidth) / 2 - 35;// 感觉不居中,向左移动35个单位
g2.drawString(markNameStr + "节能账单", titleWidthX, 45); // 账单周期
g2.setFont(new Font("宋体", Font.BOLD, 20));
g2.drawString("账单周期", 33, 125);
// 账单周期的值
g2.drawString(zhangdanzhouqiStr, 230, 125); // 账单天数
g2.drawString("账单天数", 33, 200);
// 账单天数的值
g2.drawString(zhangdantianshuStr, 230, 200); // 泵额定功率
g2.drawString("泵额定功率", 33, 274);
// 泵额定功率
g2.drawString(bengedinggonglvStr, 230, 274); // 泵变频节能运行用电量
g2.drawString("泵变频节能运", 33, 338);
g2.drawString("行用电量", 33, 360);
// // 泵变频节能运行用电量的值
g2.drawString(bengbianpingjienengyunxingyongdianliangStr, 230, 345); // 电价
g2.drawString("电价", 33, 423);
// 电价的值
g2.drawString(dianjiaStr, 230, 423); // 平均节能率
g2.drawString("平均节能率", 33, 496);
// 平均节能率
g2.drawString(pingjunjienenglvStr, 230, 496); // 待支付金额
g2.drawString("待支付金额", 33, 568);
// 待支付金额的值
g2.drawString(daizhifujingeStr, 230, 568); // 泵运行总时长
g2.drawString("泵运行总时长", 420, 200);
// 泵运行总时长的值
g2.drawString(bengyunxingzongshichangStr, 630, 200); // 泵工频运行用电量
g2.drawString("泵工频运行用", 420, 265);
g2.drawString("电量", 420, 287);
// 泵工频运行用电量的值
g2.drawString(benggongping运行yongdianliangStr, 630, 274); // 节省电量
g2.drawString("节省电量", 420, 348);
// 节省电量的值
g2.drawString(jieshengdianliangStr, 630, 345); // 节省金额
g2.drawString("节省金额", 420, 423);
// 节省金额的值
g2.drawString(jieshengjineStr, 630, 423); g2.dispose(); // 释放对象
ImageIO.write(bi, "JPEG", new FileOutputStream("D:/a.jpg"));// 保存图片 JPEG表示保存格式
}

3、生成效果图

这个只是个简版,大家可根据自己所需要的模板或图片内容进行修改。

摘自:https://blog.csdn.net/qq_40711092/article/details/121569873

Java生成图片(简版)的更多相关文章

  1. java语言实现简单接口工具--粗简版

    2016注定是变化的一年,忙碌.网红.项目融资失败,现在有点时间整整帖子~~ 目标: 提高工作效率与质量,能支持平台全量接口回归测试与迭代测试也要满足单一接口联调测试. 使用人员: 测试,开发 工具包 ...

  2. 【Spring源码解析】—— 简单工厂模式的BeanFactory的超简版实现

    一.什么是简单工厂模式 设计模式的核心是“分工”,通过分工将对象与职责划分的更细化,进而提升系统设计的可扩展性,使其更容易维护. 开闭原则:对扩展开放,对修改关闭:要增加一个新的处理逻辑,可以开一个新 ...

  3. SpringBoot2+Netty打造通俗简版RPC通信框架(升级版)

    背景         上篇文章我简单的介绍了自己打造的通俗简版RPC通信框架,这篇是对简版的增强~         如果大家对此项目还感兴趣的话,可到码云上瞄瞄:Netty-RPC         上 ...

  4. SpringBoot2+Netty打造通俗简版RPC通信框架

    2019-07-19:完成基本RPC通信! 2019-07-22:优化此框架,实现单一长连接! 2019-07-24:继续优化此框架:1.增加服务提供注解(带版本号),然后利用Spring框架的在启动 ...

  5. SimpleThreadPool极简版

    package com.dwz.concurrency.chapter13; import java.util.ArrayList; import java.util.LinkedList; impo ...

  6. 简版在线聊天Websocket

    序言 What is Webscoket ? websocket 应用场景 简版群聊实现 代码例子 小结 Webscoket Websokcet 是一种单个TCP连接上进行全双工通信的协议,通过HTT ...

  7. Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc

    Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...

  8. 《Thinking In Java第四版》拾遗

    <Thinking In Java第四版>拾遗 转自我的github(http://katsurakkkk.github.io/2016/05/Thinking-In-Java%E7%AC ...

  9. Java实现简单版SVM

    Java实现简单版SVM 近期的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的.         之所以说是简单版,由于没实用到拉格朗日,对偶,核函数等等.而 ...

  10. python练习_购物车(简版)

    python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下 ...

随机推荐

  1. UE4 内存写坏导致异常崩溃问题记录

    1. 问题表现 经常出现进程崩溃,崩溃堆栈较为底层 原因基本上都是 read write memory 时触发了异常,盘查后初步怀疑是内存写坏了. 2. 排查期 UE 支持各种内存分配器: TBB A ...

  2. 当我第一次通过Kotlin和Compose来实现一个Canvas时, 我收获了什么?

    当我第一次通过Kotlin和Compose来实现一个Canvas时, 我收获了什么? 自从2019年Google推荐Kotlin为Android开发的首选语言以来已经经历了将近四年的时间, Compo ...

  3. vue下载文件模板(excel) 和 导出excel表格

    1. get形式传参数 仅限于get方式,注意请求头参数...,需要后台放开 window.location = '/dms-underlying-asset/download?assetType=' ...

  4. Win HttpRunner3 + Allure 实现接口自动化

    HTTPRunner3介绍: HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测 ...

  5. 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~

    上一章介绍了如何基于APE+SELF自动化构建指令微调样本.这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写 ...

  6. office办公套件基础教程

    正文 1.网页端的应用-office全家桶 这里我选择先聊web端的应用,首先,我们来想象一下,只要你有网络,有浏览器,就能打开一个网页,在网页上进行编辑.处理一些word.报表.ppt等,你不需要复 ...

  7. 2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值。 如果可以做到,请返回任何 [i, j],其中 i+1 < j

    2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值. 如果可以做到,请返回任何 [i, j],其中 i+1 < ...

  8. 2020-11-04:java里,总体说一下集合框架。

    福哥答案2020-11-04: 福哥口诀法:收马李色坤(Collection.Map.List.Set.Queue).李矢数链写(List:Vector矢量.ArrayList数组.LinkedLis ...

  9. 2021-12-21:任务调度器。 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间

    2021-12-21:任务调度器. 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表.其中每个字母表示一种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间 ...

  10. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

    问题描述 新建表或者修改表varchar字段长度的时候,出现这个错误 Row size too large. The maximum row size for the used table type, ...