如何使用图片生成荣誉证书
公司项目有一个根据图片模板生成荣誉证书的需求,不废话,这里直接上代码
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
如何使用图片生成荣誉证书相关推荐
- Java生成荣誉证书PDF文件
公司最近新需求要针对已经学完课程的同学提供下载结业证书,我们开发小组通过内部协商最终采用pdf方式让用户进行下载.操作pdf java 一般都是通过itext来实现,由于之前没有使用itext生成pd ...
- Java/web/jsp根据pdf模板生成荣誉证书PDF文件
Java/web/jsp根据pdf模板生成荣誉证书PDF文件 1.前言 最近博主在开发一个大学生学分管理系统,按照对方用户的要求,他们需要一个生成PDF荣誉证书的功能. 于是Java根据pdf模板生成 ...
- PHP使用Laravel生成荣誉证书和往图片上写字
先来看看效果图: 背景图(生成前): 生成后: 软件使用插件Intervention/image,这个是官网 http://image.intervention.io 1.首先,给LARAVEL中安装 ...
- .Net MVC 图片合成、证书生成
.Net MVC 图片合成.证书生成 文章目录 .Net MVC 图片合成.证书生成 前言 一.封装ImgText对象 二.ImageUtil帮助类 三.测试 总结 前言 在开发中有一些场景中我们需要 ...
- .Net Core 图片合成、证书生成
.Net Core 图片合成.证书生成 文章目录 .Net Core 图片合成.证书生成 前言 一.封装ImgText对象 二.ImageUtil帮助类 三.测试 总结 前言 在开发中有一些场景中我们 ...
- java使用itextpdf生成PDF批量打印荣誉证书(指定位置输出文字)
最近公司项目有个需求,批量打印荣誉证书,一开始尝试过传统的网络打印,控件打印,JS调用浏览器打印方法,遇到各种问题,比如定位不准,分页问题,缩放问题等.然后就自己研究,整理了一套打印方案,项目已测 ...
- java 生成证书图片_java生成自定义证书图片4
终于到了生成自定义证书图片的最后一步,pdf转图片我选择使用pdfbox库,以下是工具类: packagecom.x.certificate.pdf;importjava.awt.image.Buff ...
- 营业执照psd模板2020_荣誉证书聘书奖状模板,CFR矢量素材PSD源文件,700张精美套用...
Hello大家好,我是帮帮.今天跟大家分享一组认证荣誉证书聘书奖状模板,CFR矢量素材,PSD源文件,700张精美套用. 为了让大家能更稳定的下载模板,我们又开通了全新下载方式(见文章末尾),以便大家 ...
- 生成android 证书
签名文件keystore一般有两种:jks后缀或者keystore后缀,Android Studio中创建的为jks后缀,keytool创建的为keystore后缀,两种文件均可用于APP打包. 1. ...
最新文章
- 微信小程序tabBar
- ubuntu分屏软件_Ubuntu终端多窗口分屏Terminator
- RabbitMQ延迟消费和重复消费
- mysql -uroot -p -P3306 -h192.168.0.111无法远程连接mysql
- [C++]VS2005(VC8) 使用 Boost
- toString()
- java实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】
- react-props属性
- Oracle Real Application Testing diagram
- MyBatis 自定义 typeHandler
- Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)
- python安装django模块_在您的(Django)项目中使用setup.py
- JSR-303 数据校验学习
- 需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)
- [No000045]最好的休息,不是睡觉!
- rocketmq顺序消费问题
- 威联通建php邮件服务器_威联通 ※ 群晖 虚拟机性能对比 我可能要碰瓷 eSir
- 第7章页面布局-布局综合示例
- html 名人名言源代码,基于JQuery及AJAX实现名人名言随机生成器_咋地 _前端开发者...
- 单片机c语言ad与da转换实验报告,单片机AD与DA转换实验报告.docx
热门文章
- C#技巧:网页表单自动填写技术
- 多线程代码块同步——抢火车票
- vue关闭严格语法检查
- Axure RP7.0制作网站后台管理系统模板(一)
- 线性代数-Gilbert Strang(第一部分)
- xbox one无线手柄在ubuntu下的对接开发
- 微软推出新版Xbox One手柄 配对更迅速
- 【Unity3D】Unity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )
- 道冲,而用之有弗盈也。
- 怎样用计算机进入手机驱动程序,电脑没有手机驱动如何解决?