Java套版生成动态图片 , 适用于动态的名片生成 , 证件生成等

制作的图片底版  

生成后的图片效果

package com.ssmf;/*** 套版生成实体类* @类 名 : CreateImageBean* @功能描述 : TODO* @作者信息 : CBC* @修改备注 :*/
public class CreateImageBean {private Integer fontSize = null;// type为string的时候,为自定义文本内容private String type = "string";// string||imageprivate String content = "";// type为image的时候,为本地图片路径,type为string的时候,为文本内容private Integer height = 0;// 高度 (type为image的时候,为图片的高度)private Integer width = 0; // 宽度 (type为image的时候,为图片的宽度,type为string的时候,为文本范围的宽度并计算居中)private Integer x = 0;// 距离左部的像素private Integer y = 0;// 距离顶部的像素public CreateImageBean(String type, String content, Integer x, Integer y, Integer height,Integer width, Integer fontSize) {super();this.type = type;this.content = content;this.height = height;this.width = width;this.x = x;this.y = y;this.fontSize = fontSize;}public CreateImageBean(String type, String content, Integer x, Integer y, Integer height,Integer width) {super();this.type = type;this.content = content;this.height = height;this.width = width;this.x = x;this.y = y;}public Integer getFontSize() {return fontSize;}public void setFontSize(Integer fontSize) {this.fontSize = fontSize;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Integer getHeight() {return height;}public void setHeight(Integer height) {this.height = height;}public Integer getWidth() {return width;}public void setWidth(Integer width) {this.width = width;}public Integer getX() {return x;}public void setX(Integer x) {this.x = x;}public Integer getY() {return y;}public void setY(Integer y) {this.y = y;}}
package com.ssmf;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;import javax.imageio.ImageIO;/*** 生成动态图片* @类 名 : CreateImage* @功能描述 : TODO* @作者信息 : CBC* @创建时间 : 2017-9-10上午12:21:09* @修改备注 :*/
public class CreateImage {/** 模板图片路径 */private static String TEMPLATEPAHT = "";/** 模板印章路径 */private static String TEMPLATEPATHYZ = "";static {TEMPLATEPAHT = "D:\\准考证.png";TEMPLATEPATHYZ = "D:\\准考证签发单位章.png";}private static int getCount(String content, int fontSize) {char[] c = content.toCharArray();double count = 0;for(int i = 0; i < c.length; i ++) {String len = Integer.toBinaryString(c[i]);if(len.length() > 8) {count++;}else{count = (count + 0.5);}}return (int) (fontSize * count);}public static void main(String[] args) {Map<String, CreateImageBean> map = new HashMap<String, CreateImageBean>();map.put("标题", new CreateImageBean("string", "XXX培训准考证", 32, 95, null, 1126, 40));map.put("报名地市", new CreateImageBean("string", "XXX5224", 210, 175, null, null));map.put("考生姓名", new CreateImageBean("string", "张三丰", 210, 250, null, null));map.put("性别", new CreateImageBean("string", "男", 210, 329, null, null));map.put("报考级别", new CreateImageBean("string", "考全级", 210, 402, null, null));map.put("工作单位", new CreateImageBean("string", "XXXXX市XXX县", 210, 480, null, null));map.put("考点地址", new CreateImageBean("string", "XXXXXXX", 210, 558, null, null));map.put("报名序号", new CreateImageBean("string", "XXXX0220", 693, 175, null, null));map.put("证件号码", new CreateImageBean("string", "XXXXXXXXXXXXXXXXXX", 693, 250, null, null));map.put("档案号", new CreateImageBean("string", "NHX0025666325", 693, 329, null, null));map.put("报考专业", new CreateImageBean("string", "建筑施工安全", 693, 402, null, null));map.put("人员头像", new CreateImageBean("image", "D:\\头像照片.jpg", 971, 133, 184, 220));map.put("考试科目", new CreateImageBean("string", "全科的考试", 34, 710, null, 347));map.put("准考证号", new CreateImageBean("string", "NHXAJ022365", 381, 710, null, 292));map.put("考试时间", new CreateImageBean("string", "2021年4月25日13点", 678, 710, null, 273));map.put("考场", new CreateImageBean("string", "1", 954, 710, null, 106));map.put("座位号", new CreateImageBean("string", "96", 1063, 710, null, 94));map.put("盖章", new CreateImageBean("image", TEMPLATEPATHYZ, 855, 280, 350, 350));createImage(map, "D:\\输出.png", Color.black, 25, true, "宋体");}/*** @Title : createImage* @功能描述 : TODO* @设定文件 : @param map 需要填充的数据集合* @设定文件 : @param path 文件输出的路径* @设定文件 : @return* @返回类型 : String 文件路径* @throws :*/public static String createImage(Map<String, CreateImageBean> map, String path, Color color, Integer fontSize, Boolean fontBold, String typeface) {String filepath = null;try{// 加载模板图片BufferedImage image = ImageIO.read(new File(TEMPLATEPAHT));// 得到图片操作对象Graphics graphics = image.getGraphics();  // 设置文字的颜色为黑色graphics.setColor(color); // 设置文字的字体,大小graphics.setFont(new Font(typeface, (fontBold ? Font.BOLD : null), fontSize));for(Entry<String, CreateImageBean> bean : map.entrySet()) {CreateImageBean b = bean.getValue();if("string".equals(b.getType())) {// 自定义字体大小if(b.getFontSize() != null) {graphics.setFont(new Font(typeface, (fontBold ? Font.BOLD : null), b.getFontSize()));}if(b.getWidth() != null) {int count = getCount(b.getContent(), (b.getFontSize() == null ? fontSize : b.getFontSize()));int startX = ((b.getWidth()) - count) / 2;// 将文字放入模板中graphics.drawString(b.getContent(), startX +  b.getX(), b.getY()); }else{// 将文字放入模板中graphics.drawString(b.getContent(), b.getX(), b.getY()); }if(b.getFontSize() != null) {// 将字体大小切换回默认graphics.setFont(new Font(typeface, (fontBold ? Font.BOLD : null), fontSize));}}if("image".equals(b.getType())) {File file = new File(b.getContent());// 对头像进行裁剪Image img = thumbnail(file, b.getHeight(), b.getWidth());// 将头像放入模板中graphics.drawImage(img, b.getX(), b.getY(), null);}}// 将图片存储到本地createImage(path, image);  }catch (Exception e) {e.printStackTrace();}return filepath;}/*** 将image对象存储到本地* @Title : createImage* @功能描述 : TODO* @设定文件 : @param fileLocation 本地路径* @设定文件 : @param image 图片对象* @返回类型 : void* @throws :*/private static void createImage(String fileLocation, BufferedImage image) {  try {  String formatName = fileLocation.substring(fileLocation.lastIndexOf(".") + 1);ImageIO.write(image, formatName , new File(fileLocation));} catch (Exception e) {  e.printStackTrace();  }  }  /*** 图片压缩-按照固定宽高原图压缩* @Title : thumbnail* @功能描述 : TODO* @设定文件 : @param img 本地图片地址* @设定文件 : @param width 图片宽度* @设定文件 : @param height 图片高度* @设定文件 : @return* @设定文件 : @throws IOException* @返回类型 : Image* @throws :*/public static Image thumbnail(File img, int width, int height) throws IOException {BufferedImage BI = ImageIO.read(img);Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.setColor(Color.RED);g.drawImage(image, 0, 0, null);g.dispose();return image;}}

Java套版生成动态图片相关推荐

  1. 能够生成动态图片的R模块:rCharts

    能够生成动态图片的R模块:rCharts 下载安装略麻烦,因为这个模块还没有放在CRAN上面: install.packages("downloader") library(dow ...

  2. Photoshop根据图片模板批量生成动态图片

    需求:给定图片模板,在图片上面维护相关数据,把Excel表中的信息一个一个作到图中. 就技术角度而言,这样的操作并没有多少技术含量,然而却需要耗费大量的时间.如果提供的数据是上百条甚至上千条,你是否仍 ...

  3. java awt生成签名图片消除锯齿化

    项目场景: 在一个线上互联网医院中,需要生成电子处方图片,图片里面会有医生的手写签名.通过java.awt的Graphics2D方式来生成处方图片,并将手写签名的图片导入其中. 问题描述: 但是在签名 ...

  4. java实现生成验证码图片

    1.将图片验证码生成到本地的例子: package demo;import java.awt.Color; import java.awt.Font; import java.awt.Graphics ...

  5. 使用java Graphics2D生成海报图片

    前言:最近做的一个项目需要给商户提供生成海报的功能.本来想着用前端canvas来实现,用户自己去托拉拽,生成想要的图片,可视化比较好.后来需求是要在后端生成固定格式的海报图片,只是商户信息发生改变.所 ...

  6. Java Swing实现动态图片

    要在JPanel中放一张动态图片其实不难,只要用到 javax.swing.ImageIcon类. 首先介绍下这个类: ImageIcon是图标界面的一种实现,它从图像中绘制图标.从URL.文件名或字 ...

  7. java png生成webp图片_PNG转WEBP格式的动态图

    最近接手的项目上需要替换以前的UI资源,其中有部分动态图使用的是freso+webp进行显示,然而设计给的只有一帧帧的PNG格式,本来想随便转个GIF弄上去,结果透明背景的PNG转成GIF很容易出现白 ...

  8. java随机生成验证码图片

    验证码 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart&qu ...

  9. JAVA生成热点图,JAVA 后端生成热力图图片返回

    基于定位的热力图展示,后端实现 首先将实际坐标转换成像素坐标 操作图片像素 不断的增加像素RGB值 扩大像素点范围,根据聚集程度设置色阶,最后高斯模糊形成热力图 这里是根据实际场景自动生成对应等比例大 ...

最新文章

  1. 解决BDOC structure里header和data structure里数据格式不一致的问题
  2. Leetcode 124.二叉树中的最大路径
  3. hdu 5172 GTY's gay friends(线段树最值)
  4. java gc日志乱码_gc原理以及gc日志剖析
  5. 英特尔无人车!灯,等灯等灯!
  6. Ueditor 使用
  7. 在知网下载硕士的论文PDF格式无需安装CAJ软件
  8. wsl使用ssh连接
  9. Bulma和 Tailwind功能比较
  10. 股票十档行情数据接口怎么看?
  11. Error response from daemon: Pool overlaps with other one on this address space
  12. android 实现qq动画,Android实现仿QQ登录界面背景动画效果
  13. 关于虚拟机复制文件时:无法确定本地文件类型。您可能没有执行此操作的权限。 正在取消文件复制操作。的决解方法
  14. 大象跳转:解析微信内自动跳转浏览器打开URL网页的操作步骤
  15. 如何写好技术部门的年度 OKR
  16. autojs之高德地图定位
  17. 再现地表最强屏幕,三星Note 9破11项纪录称皇
  18. Missing Marketing Icon. iOS Apps must include a 1024x1024px Marketing Icon in PNG format. Apps that
  19. 服务器硬盘故障问题有哪些
  20. IoC容器和Servlet容器

热门文章

  1. PCB的地与机壳(连接大地)为什么用阻容连接
  2. 成功解决第nnnnnn次couldn't communicate with the NVIDIA driver后的方案总结
  3. 字符流(输入,输出)
  4. 【毕业设计】远程智能浇花灌溉系统 - stm32 单片机 嵌入式 物联网
  5. Linux常用命令——lftp命令
  6. SUSAN角点检测算法实现(详细版)
  7. 让我康康,还有谁不知道这些简单的vr全景制作“小心机”?
  8. win7 64位系统web项目导出Excel问题汇总
  9. [光源频闪] Basler相机光源频闪设置操作说明
  10. mysql-installer-community.msi新手安装教程(详细图文)