公司项目有一个根据图片模板生成荣誉证书的需求,不废话,这里直接上代码

package com.example.demo.honorcert;import com.example.demo.util.FontUtil;
import lombok.extern.slf4j.Slf4j;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;import static com.example.demo.honorcert.ImageInfoDTO.createImageDTO;/*** @author charles*/
@Slf4j
public class ImageMarkUtils {/*** 编辑图片,往指定位置添加文字** @param srcImgPath    :源图片路径* @param targetImgPath :保存图片路径* @param list          :文字集合*/public static Boolean writeImage(String srcImgPath, String targetImgPath, List<ImageInfoDTO> list) {FileOutputStream outImgStream = null;String fileExt = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1);try {//读取原图片信息//得到文件File srcImgFile = new File(srcImgPath);//文件转化为图片Image srcImg = ImageIO.read(srcImgFile);//获取图片的宽int srcImgWidth = srcImg.getWidth(null);//获取图片的高int srcImgHeight = srcImg.getHeight(null);//添加文字:BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = bufImg.createGraphics();g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);for (ImageInfoDTO imgDTO : list) {//根据图片的背景设置水印颜色g.setColor(imgDTO.getColor());g.setFont(imgDTO.getFont());//防锯齿g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//设置字体int x = imgDTO.getX();//判断是否居中if (imgDTO.getIsCenter()) {FontMetrics fm = g.getFontMetrics(imgDTO.getFont());x = (srcImgWidth - fm.stringWidth(imgDTO.getText())) / 2;}//画出水印g.drawString(imgDTO.getText(), x, imgDTO.getY());}g.dispose();// 输出图片outImgStream = new FileOutputStream(targetImgPath);return ImageIO.write(bufImg, fileExt, outImgStream);} catch (Exception e) {log.error("==== 系统异常====" + e);return false;} finally {try {if (null != outImgStream) {outImgStream.flush();outImgStream.close();}} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {//模板文件地址String srcImgPath = "/Users/mac/tmp/Lark20210812-140547.PNG";//证书生成地址String tarImgPath = "/Users/mac/tmp/test111.PNG";//创建图片文字数据集合;List<ImageInfoDTO> list = new ArrayList<>();list.add(createImageDTO("2020-02-02", Color.BLACK, FontUtil.loadFontResource(Font.BOLD, 36), 770, 1295, false));list.add(createImageDTO("SOIDMN9929399", Color.BLACK, FontUtil.loadFontResource(Font.BOLD, 36), 250, 1290, false));list.add(createImageDTO("张三", Color.BLACK, FontUtil.loadFontResource(Font.BOLD, 100), 500, 650, true));list.add(createImageDTO("《XX课程》", Color.BLACK, FontUtil.loadFontResource(Font.BOLD, 50), 450, 860, true));//操作图片:ImageMarkUtils.writeImage(srcImgPath, tarImgPath, list);//TODO 上传文件}
}
package com.example.demo.honorcert;import lombok.Data;import java.awt.*;/*** @author charles*/
@Data
public class ImageInfoDTO {/*** 文字内容*/private String text;/*** 字体颜色和透明度*/private Color color;/*** 字体*/private Font font;/*** 所在图片的x坐标*/private Integer x;/*** 所在图片的y坐标*/private Integer y;/*** 是居中*/private Boolean isCenter;/*** 创建ImageInfoDTO, 每一个对象,代表在该图片中要插入的一段文字内容:** @param text     : 文本内容;* @param color    : 字体颜色(前三位)和透明度(第4位,值越小,越透明);* @param font     : 字体的样式和字体大小;* @param x        : 当前字体在该图片位置的横坐标;* @param y        : 当前字体在该图片位置的纵坐标;* @param y        : 当前字体在该图片位置的纵坐标;* @param isCenter : 当前字体在该图片位置是否居中;* @return 图片信息对象*/public static ImageInfoDTO createImageDTO(String text, Color color, Font font, int x, int y, boolean isCenter) {ImageInfoDTO imageInfoDTO = new ImageInfoDTO();imageInfoDTO.setText(text);imageInfoDTO.setColor(color);imageInfoDTO.setFont(font);imageInfoDTO.setX(x);imageInfoDTO.setY(y);imageInfoDTO.setIsCenter(isCenter);return imageInfoDTO;}}
package com.example.demo.util;import org.springframework.core.io.ClassPathResource;import java.awt.*;
import java.io.InputStream;/*** @author mac*/
public class FontUtil {/*** 导入本地字体 防止linux下汉字乱码** @param style 字体类型* @param size  字体大小* @return 字体*/public static Font loadFontResource(int style, int size) {InputStream resourceAsStream = null;try {ClassPathResource classPathResource = new ClassPathResource("font/MSYH.TTF");resourceAsStream = classPathResource.getInputStream();Font font = Font.createFont(Font.TRUETYPE_FONT, resourceAsStream);return font.deriveFont(style, size);} catch (Exception e) {e.printStackTrace();return null;}}
}

为了解决linux环境乱码问题,这里使用的是本地自己导入的字体,可以直接从win系统中将字体拷贝出来,将ttc尾缀修改为ttf就就行

这里贴上码云地址:https://gitee.com/TianXiaMeiSEI/learning-code.git

如何使用图片生成荣誉证书相关推荐

  1. Java生成荣誉证书PDF文件

    公司最近新需求要针对已经学完课程的同学提供下载结业证书,我们开发小组通过内部协商最终采用pdf方式让用户进行下载.操作pdf java 一般都是通过itext来实现,由于之前没有使用itext生成pd ...

  2. Java/web/jsp根据pdf模板生成荣誉证书PDF文件

    Java/web/jsp根据pdf模板生成荣誉证书PDF文件 1.前言 最近博主在开发一个大学生学分管理系统,按照对方用户的要求,他们需要一个生成PDF荣誉证书的功能. 于是Java根据pdf模板生成 ...

  3. PHP使用Laravel生成荣誉证书和往图片上写字

    先来看看效果图: 背景图(生成前): 生成后: 软件使用插件Intervention/image,这个是官网 http://image.intervention.io 1.首先,给LARAVEL中安装 ...

  4. .Net MVC 图片合成、证书生成

    .Net MVC 图片合成.证书生成 文章目录 .Net MVC 图片合成.证书生成 前言 一.封装ImgText对象 二.ImageUtil帮助类 三.测试 总结 前言 在开发中有一些场景中我们需要 ...

  5. .Net Core 图片合成、证书生成

    .Net Core 图片合成.证书生成 文章目录 .Net Core 图片合成.证书生成 前言 一.封装ImgText对象 二.ImageUtil帮助类 三.测试 总结 前言 在开发中有一些场景中我们 ...

  6. java使用itextpdf生成PDF批量打印荣誉证书(指定位置输出文字)

    最近公司项目有个需求,批量打印荣誉证书,一开始尝试过传统的网络打印,控件打印,JS调用浏览器打印方法,遇到各种问题,比如定位不准,分页问题,​​缩放问题等.然后就自己研究,整理了一套打印方案,项目已测 ...

  7. java 生成证书图片_java生成自定义证书图片4

    终于到了生成自定义证书图片的最后一步,pdf转图片我选择使用pdfbox库,以下是工具类: packagecom.x.certificate.pdf;importjava.awt.image.Buff ...

  8. 营业执照psd模板2020_荣誉证书聘书奖状模板,CFR矢量素材PSD源文件,700张精美套用...

    Hello大家好,我是帮帮.今天跟大家分享一组认证荣誉证书聘书奖状模板,CFR矢量素材,PSD源文件,700张精美套用. 为了让大家能更稳定的下载模板,我们又开通了全新下载方式(见文章末尾),以便大家 ...

  9. 生成android 证书

    签名文件keystore一般有两种:jks后缀或者keystore后缀,Android Studio中创建的为jks后缀,keytool创建的为keystore后缀,两种文件均可用于APP打包. 1. ...

最新文章

  1. 微信小程序tabBar
  2. ubuntu分屏软件_Ubuntu终端多窗口分屏Terminator
  3. RabbitMQ延迟消费和重复消费
  4. mysql -uroot -p -P3306 -h192.168.0.111无法远程连接mysql
  5. [C++]VS2005(VC8) 使用 Boost
  6. toString()
  7. java实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】
  8. react-props属性
  9. Oracle Real Application Testing diagram
  10. MyBatis 自定义 typeHandler
  11. Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)
  12. python安装django模块_在您的(Django)项目中使用setup.py
  13. JSR-303 数据校验学习
  14. 需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)
  15. [No000045]最好的休息,不是睡觉!
  16. rocketmq顺序消费问题
  17. 威联通建php邮件服务器_威联通 ※ 群晖 虚拟机性能对比 我可能要碰瓷 eSir
  18. 第7章页面布局-布局综合示例
  19. html 名人名言源代码,基于JQuery及AJAX实现名人名言随机生成器_咋地 _前端开发者...
  20. 单片机c语言ad与da转换实验报告,单片机AD与DA转换实验报告.docx

热门文章

  1. C#技巧:网页表单自动填写技术
  2. 多线程代码块同步——抢火车票
  3. vue关闭严格语法检查
  4. Axure RP7.0制作网站后台管理系统模板(一)
  5. 线性代数-Gilbert Strang(第一部分)
  6. xbox one无线手柄在ubuntu下的对接开发
  7. 微软推出新版Xbox One手柄 配对更迅速
  8. 【Unity3D】Unity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )
  9. 道冲,而用之有弗盈也。
  10. 怎样用计算机进入手机驱动程序,电脑没有手机驱动如何解决?