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. TypeScript 学习笔记 — 数组常见的类型转换操作记录(十四)

    获取长度 length type LengthOfTuple<T extends any[]> = T["length"]; type A = LengthOfTupl ...

  2. 使用require.context实现优雅的预加载

    前言 在前端开发中,对页面花里胡哨度[注1]要求越高的页面,用到的图片.音频什么的就越多,比如什么结婚请柬.展会请柬.发布会宣传页.数据大屏.虽然现在浏览器不允许网页在没有用户交互的情况下播放音频,但 ...

  3. MySQL如何获取binlog的开始时间和结束时间

    MySQL数据库恢复到指定时间点时,我们必须通过MySQL全备+MySQL增量备份(可选)+MySQL的二进制日志(binlog)进行重放来恢复到指定时间点,实际的生产环境中,可能一段时间内生成了多个 ...

  4. 2022-01-31:迷宫 III。 由空地和墙组成的迷宫中有一个球。球可以向上(u)下(d)左(l)右(r)四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。迷宫中还有一个洞

    2022-01-31:迷宫 III. 由空地和墙组成的迷宫中有一个球.球可以向上(u)下(d)左(l)右(r)四个方向滚动,但在遇到墙壁前不会停止滚动.当球停下时,可以选择下一个方向.迷宫中还有一个洞 ...

  5. PictureBox保存图片照片到数据库

    Private Sub PAPHOTO_SAVE() Try If TxtPictureURL.Text.ToString <> "" Then Dim SQL_Str ...

  6. linux DNS域名解析

    目录 一.DNS概念 二.域名格式类型 三.查询类型 四.解析类型 五.配置DNS 六.dns解析实验 1.配置正向解析 2.反向解析 3.主从解析 一.DNS概念 概念:域名和IP地址的相互映射的分 ...

  7. 代码随想录算法训练营Day55 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day55 动态规划| 392.判断子序列 115.不同的子序 392.判断子序列 题目链接:392.判断子序列 给定字符串 s 和 t ,判断 s 是否为 ...

  8. OODO有关账户account模块学习

    一.记账凭证(Account Move) 会计上的记账凭证,也叫会计分录,在Odoo中叫"Account Move".Account Move直译是"账户移动" ...

  9. IntelliJ IDEA 的安装

    IntelliJ IDEA 的安装 安装之前参考Win10环境配置(二) --Java篇 1. 下载软件 官网: IntelliJ IDEA 分两个版本,学习Java下Community版 2.安装 ...

  10. 逍遥自在学C语言 | break-循环的中断与跳转

    前言 在C语言中,break语句是一种控制流语句,它用于终止当前所在的循环结构(for.while.do-while)或者switch语句,从而跳出循环或者结束switch语句的执行. 一.人物简介 ...