/*** @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画图相关推荐

  1. java graphics2d 画圆_java Graphics2D 画图

    平时出图都是前端画图的,本次画图是对响应时间有要求,所有给后端提的需求.这里就给出一个demo 还有列出其中遇到的几个小问题 1 首先列出结果图 2   遇到的问题 1  这是两张图片覆盖的. cov ...

  2. Graphics2D画图案例

    文章目录 绘制线 绘制矩形 圆形矩形 利用矩形的圆角魔改成圆形 写字: 小案例 海报案例关键代码 效果 git代码地址: 背景: 项目中需要用到一个小程序海报,然后分享给别人,因为前端绘制太慢,所以思 ...

  3. 这些个JAVA开源工具(那是相当地多啊)

    OpenCms [Java开源 CMS系统] OpenCms是一个J2EE的产品,它是用Java写成的.它和Tomcat捆绑在一起.但是也能够使用ATG Dynamo.WebLogic和WebSphe ...

  4. JAVA开源工具大全

    文章来源:open-open Spring Framework  [Java开源 J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一 ...

  5. java开源工具简介

    来源:http://baike.baidu.com/view/629119.htm 通俗点说, 就是你写了一个软件, 然后把这个软件的源代码发布到网上, 让大家都可以学习,改进. 就是开源! 专业点说 ...

  6. java设置文本框里字体颜色_swing设置字体颜色

    ());//设置该容器的布局 container.setBackground(Color.red);//设置字体对话框颜色 testLabel = new JLabel("作者:张旭&quo ...

  7. Java emf转png

    /*** emf转png** @param emfPath emf地址* @param pngPath png地址*/private static void emfToPng(String emfPa ...

  8. java开源工具简介(2)

    java开源工具简介(2) OpenCms [Java开源 CMS系统] OpenCms是一个J2EE的产品,它是用Java写成的.它和Tomcat捆绑在一起.但是也能够使用ATG Dynamo.We ...

  9. java画笔覆盖在界面_Java实现画图程序和重绘

    上次聊了一下事件监听机制,今天就来聊一下怎么实现一个画图程序并且实现重绘. 一.实现画图程序 1.实现一个画图程序所需的API类? JFrame窗体容器组件类 JPanel 面板元素组件类 JButt ...

最新文章

  1. haar 人脸检测跟踪源码整理
  2. ESXi上的固态硬盘识别为非SSD
  3. 【C++】38.类成员变量声明为 对象与指针的区别
  4. 空间地理加权回归stata_xy妙妙屋丨地理加权回归和空间自相关
  5. python3 开发面试题(collections中的Counter)6.7
  6. latex精要(1)-安装与helloworld
  7. Jzoj4840 小W砍大树
  8. NSRange类详解
  9. 【2019杭电多校第七场1006=HDU6651】Final Exam(思维转换)
  10. android 自定义进度条颜色,进度条背景颜色
  11. 【正点原子Linux连载】第六十九章 Linux 网络驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  12. MT6573_FlashTool 下载的使用说明
  13. Springboot开启APR模式
  14. C++ 侯捷视频学习(草稿)
  15. 解决报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “
  16. ECharts之阶梯瀑布柱状图
  17. Python第五周作业
  18. Python Statsmodels 统计包之 OLS 回归
  19. 2018年6月8日论文阅读
  20. 管中窥豹——应试教育与一流科学人才差距有多远

热门文章

  1. safari 模拟手机显示
  2. PIC16F15323单片机 (中断与定时器Timer0)
  3. Angular Router的组件路由介绍
  4. Python爬取多网页表格数据(非table)
  5. 【转载】知行合一在年轻人中的作用
  6. 88E1111配置及使用
  7. 笔记本界面怎么显示服务器界面,电脑桌面显示工作方案(共8篇) .docx
  8. Java框架jboot_微服务框架 Jboot 2.0.5 发布,常规更新
  9. 乓乓响再度冲刺港股:来自临时及应急服务客户毛利率达70%
  10. 半糖主义的伤感空间日志推荐:心碎后,我们落泪