Graphics2D画图
/*** @author :jerry* @date :Created in 2022/4/20 16:37* @description:图片中写文字* @version: V1.1*/import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.StringJoiner;/*** @use 利用Java代码给图片加水印*/
public class Graphics2DUtils {/*** @param waterMarkContent 水印内容* Linxu中要加字体:*/public void addWaterMark(String waterMarkContent, String fileName, int y, String srcImgPath) {// 存库的文件名String tarImgPath = Paths.get("upload").toAbsolutePath().toString() + "/" + fileName + ".jpg";Font font = new Font("微软雅黑", Font.PLAIN, 25); //水印字体//水印图片色彩以及 透明度Color markContentColor = new Color(0, 0, 0, 255); //水印颜色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);//根据图片的背景设置水印颜色g.setColor(markContentColor);//设置字体g.setFont(font);//设置水印的坐标int x = 140;
// int y = 100;//画出水印g.drawString(waterMarkContent, x, y);g.dispose();// 输出图片FileOutputStream outImgStream = new FileOutputStream(tarImgPath);ImageIO.write(bufImg, "jpg", outImgStream);System.out.println("添加水印完成");outImgStream.flush();outImgStream.close();} catch (Exception e) {e.getMessage();// TODO: handle exception}}public int getWatermarkLength(String waterMarkContent, Graphics2D g) {return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());}public static void main(String[] args) {//todo 模版文件路径String srcImgPath = Paths.get("upload").toAbsolutePath().toString() + "/fileName_template.jpg";String openId="o71E55v6okf_T4OQPAqtEku45";String filename = openId;// StringJoiner result = new StringJoiner("\r\n");ArrayList<String> lis = new ArrayList<>();lis.add("姓名:jerry");lis.add("身份证号:" + "11372119940709067X");lis.add("公司名:" + "北京好利数据有限公司");int y=565;for (int i = 0; i < lis.size(); i++) {y+=92;if(i>0){srcImgPath= Paths.get("upload/").toAbsolutePath().toString()+ "/"+openId+".jpg";
// srcImgPath= Paths.get("upload").toAbsolutePath().toString() +"/filename.jpg";}new Graphics2DUtils().addWaterMark(lis.get(i), filename,y,srcImgPath);}}
}
注意:(fileName_template.jpg为模版文件,可以自选)
Linux环境部署时中文乱码解决方案:
1.检查服务器是否有对应字体
fc-list :lang=zh
2.如果没有则安装:
安装字体库:
yum -y install fontconfig
3.从windwos系统中C:\Windows\Fonts目录下找到simsun.ttc文件,并copy到linux服务器/usr/share/fonts/chinese,chinese是自己新建的文件夹
- 执行命令修改权限
chmod 777 simsun.ttc
4.修改字体配置文件vim /etc/fonts/fonts.conf,添加<dir>/usr/share/fonts/chinese</dir>
5.保存后输入fc-cache,这样不需要重启服务器
6.最好输入fc-list :lang=zh,配置成功
Graphics2D画图相关推荐
- java graphics2d 画圆_java Graphics2D 画图
平时出图都是前端画图的,本次画图是对响应时间有要求,所有给后端提的需求.这里就给出一个demo 还有列出其中遇到的几个小问题 1 首先列出结果图 2 遇到的问题 1 这是两张图片覆盖的. cov ...
- Graphics2D画图案例
文章目录 绘制线 绘制矩形 圆形矩形 利用矩形的圆角魔改成圆形 写字: 小案例 海报案例关键代码 效果 git代码地址: 背景: 项目中需要用到一个小程序海报,然后分享给别人,因为前端绘制太慢,所以思 ...
- 这些个JAVA开源工具(那是相当地多啊)
OpenCms [Java开源 CMS系统] OpenCms是一个J2EE的产品,它是用Java写成的.它和Tomcat捆绑在一起.但是也能够使用ATG Dynamo.WebLogic和WebSphe ...
- JAVA开源工具大全
文章来源:open-open Spring Framework [Java开源 J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一 ...
- java开源工具简介
来源:http://baike.baidu.com/view/629119.htm 通俗点说, 就是你写了一个软件, 然后把这个软件的源代码发布到网上, 让大家都可以学习,改进. 就是开源! 专业点说 ...
- java设置文本框里字体颜色_swing设置字体颜色
());//设置该容器的布局 container.setBackground(Color.red);//设置字体对话框颜色 testLabel = new JLabel("作者:张旭&quo ...
- Java emf转png
/*** emf转png** @param emfPath emf地址* @param pngPath png地址*/private static void emfToPng(String emfPa ...
- java开源工具简介(2)
java开源工具简介(2) OpenCms [Java开源 CMS系统] OpenCms是一个J2EE的产品,它是用Java写成的.它和Tomcat捆绑在一起.但是也能够使用ATG Dynamo.We ...
- java画笔覆盖在界面_Java实现画图程序和重绘
上次聊了一下事件监听机制,今天就来聊一下怎么实现一个画图程序并且实现重绘. 一.实现画图程序 1.实现一个画图程序所需的API类? JFrame窗体容器组件类 JPanel 面板元素组件类 JButt ...
最新文章
- haar 人脸检测跟踪源码整理
- ESXi上的固态硬盘识别为非SSD
- 【C++】38.类成员变量声明为 对象与指针的区别
- 空间地理加权回归stata_xy妙妙屋丨地理加权回归和空间自相关
- python3 开发面试题(collections中的Counter)6.7
- latex精要(1)-安装与helloworld
- Jzoj4840 小W砍大树
- NSRange类详解
- 【2019杭电多校第七场1006=HDU6651】Final Exam(思维转换)
- android 自定义进度条颜色,进度条背景颜色
- 【正点原子Linux连载】第六十九章 Linux 网络驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- MT6573_FlashTool 下载的使用说明
- Springboot开启APR模式
- C++ 侯捷视频学习(草稿)
- 解决报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “
- ECharts之阶梯瀑布柱状图
- Python第五周作业
- Python Statsmodels 统计包之 OLS 回归
- 2018年6月8日论文阅读
- 管中窥豹——应试教育与一流科学人才差距有多远