用途说明:

1.可以用于生成自定义的水印

2.可以动态生成邀请函,指定特定对象的姓名、内容

3.可以生成手写书信(这个下载对应的手写字体,安装到电脑就可用了)

源码的功能:

1.提供自定义字体属性(样式,大小,颜色)

2.可以实现自动换行

3.可以旋转文字

4.可以保存多种格式,支持jpeg、jpg、png等

样例展示:

邀请函

水印水平方向

水印旋转

源码分析:

1.AddContent2Picture类的设计使用了构造者模式,方便初始化对象,同时提高了易读性:

构造模式部分代码:

//内部类Builder

public static class Builder {

String outImgPath;// 输出路径

String srcpath;

int x;

int y;

int border;// 边界

int lineHeight;// 行距

int rotarad;

public Builder srcpath(String srcpath) {

this.srcpath = srcpath;

return this;

}

public Builder outImagPath(String out) {

outImgPath = out;

return this;

}

public Builder contentPosition(int x, int y) {

this.x = x;

this.y = y;

return this;

}

public Builder border(int border) {

this.border = border;

return this;

}

public Builder lineHeight(int lineHeight) {

this.lineHeight = lineHeight;

return this;

}

public Builder rotarad(int rotarad) {

this.rotarad = rotarad;

return this;

}

public AddContent2Picture create() {

return new AddContent2Picture(this);

}

}

//构造方法定义为私有,不可以直接外部调用

private AddContent2Picture(Builder b) {

this.border = b.border;

this.lineHeight = b.lineHeight;

this.contentP = new Position();

contentP.x = b.x;

contentP.y = b.y;

this.lastfontsize = 0;

this.outImgPath = b.outImgPath;

this.rotarad=b.rotarad;

File srcImgFile = new File(b.srcpath);

try {

this.srcImg = ImageIO.read(srcImgFile);

srcImgWidth = srcImg.getWidth(null);

srcImgHeight = srcImg.getHeight(null);

bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);

} catch (IOException e) {

e.printStackTrace();

}

}

实例化对象时可以如下使用

//可以这样快速的构造对象

AddContent2Picture test = new AddContent2Picture.Builder()

.srcpath(srcImg)//背景图

.outImagPath(tarImgPath)//输出

.border(0)//边界

.lineHeight(0)//文字行间距

.contentPosition(10, 10)//文字内容开始位置

.create();

2.自动换行方法,需要考虑ASCII码和汉字,以及粗体问题

(1)粗体问题方案:

private int getTheFontWidth(Font font) {

int width_of_font;

@SuppressWarnings("restriction")

FontMetrics tf = sun.font.FontDesignMetrics.getMetrics(font);

if (font.isBold()) {

width_of_font = tf.stringWidth("aa");

} else {

width_of_font = tf.stringWidth("口");

}

return width_of_font;

}

(2)ASCII码和汉字问题格式化方案:

private void fonmatConten2(Font font, String msg, String footer, int startx, int starty, Graphics2D g) {

float linelen = srcImgWidth - border - startx;

starty += font.getSize();

int num;

int width_of_font = getTheFontWidth(font);

num = (int) (linelen / width_of_font);

int currword = 0;

int temp = num;

while (currword < msg.length()) {

int s = 0;

lastword = currword;

for (int i = 0; i < num && currword < msg.length(); i++, currword++) {

if (msg.charAt(currword) == '\n' && i != 0) {

currword++;

break;

}

//这里是判断是ASCII码还是其他字符

if (msg.charAt(currword) <= '~') {

s++;

if (s == 2) {

num++;

s = 0;

}

}

}

g.drawString(msg.substring(lastword, currword), startx, starty);

num = temp;

starty += lineHeight + font.getSize();

}

if (footer != null)

addFooter(font, footer, starty, g);

}

演示使用代码:

Font font = new Font("宋体", Font.PLAIN, 75);

Color fontcolor = new Color(0, 0, 0);//字体颜色

String srcImg = "";//文件背景图

String tarImgPath = "";//出输出路径

String msg = "亲爱的某某:\n 您好!\n 我们诚心邀请您出席我们组织于2018.6.8在某某广场举行的庆功会。\n 我们期待您的到临!";

String footer = "某某组织\n2018年5月19";

/*

* 图片生成

*/

AddContent2Picture test = new AddContent2Picture.Builder()

.srcpath(srcImg)//背景图

.outImagPath(tarImgPath)//输出

.border(0)//边界

.lineHeight(0)//文字行间距

.contentPosition(90, 100)//文字内容开始位置

.create();

test.addMsg(msg, footer, fontcolor, font);

test.outPutFile("jpg", "outputfilename");

项目地址:

java生成水印_(Java)图片添加水印,生成邀请函相关推荐

  1. Python学习笔记:使用PIL批量合成jpg+png图片,用于水印、合并图片,生成YOLO数据集+标注数据等等

    [Python学习笔记] 使用PIL,批量合成jpg+png图片,用于水印.合并图片,生成YOLO数据集+标注数据等等 起因:在了解很多关于YOLOv5的相关内容,于是尝试着去训练自己的游戏目标检测模 ...

  2. java 上传图片 生成缩略图_将图片生成缩略图Java代码实现

    在工作中经常会遇到图片处理相关的需求,比如说一些图片网站只展示相关的缩略图,而真实的图片可能很大而不是直接展示.所以就需要在上传相关的图片后直接对图片进行处理生成相关的缩略图.实现代码如下: impo ...

  3. java captcha 验证码_验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...

  4. java给图片加水印_Java 为图片添加水印(图片水印,文字水印)

    Java 为图片添加水印(图片水印,文字水印) 2014-07-28·WeaponX 5267 次浏览 ```java import java.awt.Color; import java.awt.F ...

  5. java word 水印_如何通过Java添加水印到Word文档

    前言 水印是一种常用于各种文档的声明.防伪手段,一般可设置文字水印或者加载图片作为水印.以下内容将分享通过Java编程给Word文档添加水印效果的方法,即 文本水印 图片水印 Jar导入: 方法1:通 ...

  6. 用pfx证书java双向认证_把CA证书生成的crt的证书和pem的私钥转换成java能够使用的keystore和pcks12的证书,实现https双向认证...

    最近在做一个https双向认证的工作,领导先让我实现,我之前写了一篇文章,把tomcat的生成证书和配置的实现写了出来. 现在领导给了我服务器的CA证书的客户端证书和私钥,服务端信任证书,分别是crt ...

  7. java语言生成语法分析_语法分析器自动生成工具一览

    最近打算重做以前的一个留下遗憾的工作,当中的一项小任务就是要求编写一个简易SQL语言的语法分析器. 本科的<编译原理>课程依稀在我脑中留下些许映象.当初的课程大作业是写一个叫Dicuf(貌 ...

  8. java实现word,pdf,excel,图片添加水印

    gitee项目地址:https://gitee.com/betelnutandwine/meutilswatermark: java实现pdf,word,excel,ppt,图片加水印 jar地址:s ...

  9. C#为图片添加水印,生成缩略图

    文章引用自http://www.hackpig.cn/post/115.html,自己略微作了些修改 代码    using System; using System.IO; using System ...

最新文章

  1. iOS 去除按钮的按下效果(阴影)
  2. 推荐系统算法_机器学习和推荐系统(二)推荐算法简介
  3. 重庆2021级春招高考成绩查询,2021重庆高考成绩查询入口
  4. leetcode_Jump Game II
  5. [No0000C0]百度网盘真实地址解析(不用下载百度网盘)20170301
  6. PSO求解梯级水库优化调度
  7. distinct的用法
  8. Javascript 常用技巧 [2]
  9. codeblocks printf函数打印不出来_最全C语言基本程序交互函数之输出到屏幕
  10. php 查询sybase 实例,php访问sybase16
  11. java中elapseTime设置新时间,Java ApplicationLike.getApplicationStartElapsedTime方法代码示例...
  12. Android颜色代码对照表
  13. 机器学习-线性回归scikit-learn
  14. Atitit 歌曲年份抓取的nlp ai项目 原理通过百度搜索,抓取第一页数据,正则数字,过滤年份。。 显示格式。。歌曲,年份,年份周围前后40字符,方便核对 通过百科抓取比较准确 红尘情歌
  15. linux ps流程,Linux下PS命令详解 (转)
  16. 64 ---- 平面与直线的位置关系
  17. Leetcode滑窗系列(java):643. 子数组最大平均数 I
  18. ubuntu16 无法调节亮度问题
  19. 如何修改cef源码支持windows xp
  20. 单页面应用(SPA)前端路由hash 模式 VS history 模式

热门文章

  1. 电脑蓝屏自动关机(方法篇----非系统原因)
  2. “她经济”崛起,茉莉智慧如何以科技赋能月子中心迭代升级?
  3. MySQL基础知识——ORDER BY
  4. windows下ftp命令
  5. 【微服务】Day10(购物车续、新增订单、Leaf)
  6. textarea标签实现change事件保存
  7. C++(数据结构与算法):52---平衡搜索树之分裂树/伸展树
  8. 常用MFC控件基础使用(Edit Button Check Combo Tree 显示位图 控件大小自适应、线程、右键菜单、控件调整移动、MFC背景)
  9. Python创意编程活动获奖名单公布啦!!
  10. 网安自学路线学习心得/学习规划