JAVA添加水印,平铺和斜对角线我都有!
Hi各位,我是树林子,一个工作两年的程序员。
最近接收到一个开发任务,给照片添加水印功能,最开始是一条对角线的水印,做完后被否掉了,要求平铺,查来查去走了不少坑,所以决定写一篇对小白超级友好,巨详细的文章。
第一种原图:
![](/assets/blank.gif)
第一种效果图:
![](/assets/blank.gif)
如果以上是你想找的,话不多说,抓紧往下看!!!!!!
调用:
//1、水印文字String logoText = "这只是一个水印 SMALLGROVE";//2、获取原始图片路径(我这里只写了本地图片路径,还有一种是从服务器的归档文件中获取)String srcImgPath = "d:/srcImg.png"; //3、目标图片路径(加完水印之后的图片,要存放的路径,随便起的名字)String targetPath = "d:/targetImg.png";//4、给图片添加水印文字(logoText水印内容,srcImgPath原图片路径,targerPath目标图片路径)markImageByText(logoText, srcImgPath, targetPath);
水印处理的方法:
/*** 给图片添加水印文字、可设置水印文字的大小、旋转角度、透明度* @param logoText 水印内容* @param srcImgPath 原图片路径* @param targetImgPath 目标图片路径*/public void markImageByText(String logoText, String srcImgPath,String targetImgPath) throws IOException {debugLog("图片开始添加水印文字");// 1、读取源图片,Image获取图片宽度、高度Image scrImg = ImageIO.read(new File(srcImgPath));BufferedImage buffImg = new BufferedImage(scrImg.getWidth(null), scrImg.getHeight(null), BufferedImage.TYPE_INT_RGB);// 2、得到画笔对象Graphics2D graphics = buffImg.createGraphics();// 3、设置对线段的锯齿状边缘处理graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);graphics.drawImage(scrImg.getScaledInstance(scrImg.getWidth(null), scrImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);// 4、设置水印倾斜度,这里是在图片的对角线上// 对角线长度lengthOfDiagonaldouble lengthOfDiagonal = Math.sqrt(Math.pow(buffImg.getWidth(),2) + Math.pow(buffImg.getHeight(),2));double v = (Math.pow(buffImg.getWidth(), 2) + Math.pow(lengthOfDiagonal, 2) - Math.pow(buffImg.getHeight(), 2)) / (2 * buffImg.getWidth() * lengthOfDiagonal);//get到了一个弧度数double acos = Math.acos(v); double myDegree = Math.toDegrees(acos);//这里的负号决定对角线-Math.toRadians(myDegree)graphics.rotate(-Math.toRadians(myDegree),(double) buffImg.getWidth() / 2,(double) buffImg.getHeight() / 2);// 5、设置水印文字颜色graphics.setColor(Color.RED);// 6、获取源图片的宽度和高度int width = scrImg.getWidth(null);int heigth = scrImg.getHeight(null);// 7、设置水印文字大小(根据原图的宽、高度,我这里是哪个长就取哪个,再除上水印字符串长度,记为size)int size = 0;if (width >= heigth) {size = width / logoText.length();} else {size = heigth / logoText.length();}//Font是JAVA中的字体类,PLAIN:普通样式常量;BOLD:粗体样式常量;ITALIC:斜体样式常量//如下初始化对象:Font font = new Font("宋体" , Font.BOLD , 23);该字体表示23磅粗体的宋体字graphics.setFont(new Font("宋体", Font.PLAIN, size));//8、设置透明度graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,0.3f));//9、设置文字位置FontDesignMetrics metrics = FontDesignMetrics.getMetrics(graphics.getFont());//获取文字宽度int strWidth = metrics.stringWidth(logoText);int strHeight = metrics.getHeight();//文字在画布上的坐标int left = (width - strWidth) / 2; //有条基线,加上ascent,相当于画布要向上移动(或是文字向下移),才能保证文字是居中的int top = (heigth - strHeight) / 2 + metrics.getAscent(); //10、水印文字开始动工了,文字内容,x,y坐标graphics.drawString(logoText, left, top);//11、释放资源graphics.dispose();//12、生成图片try {OutputStream os = null;os = new FileOutputStream(targetImgPath);ImageIO.write(buffImg, "png", os);} catch (FileNotFoundException e) {e.printStackTrace();}debugLog("图片完成添加水印文字");}
第二种原图:
![](/assets/blank.gif)
第二种效果图:
![](/assets/blank.gif)
/*** 给图片添加水印文字、可设置水印文字的大小、旋转角度、透明度** @param logoText 水印内容* @param srcImgPath 原图片路径* @param targerPath 目标图片路径*/public void markImageByText(String logoText, String srcImgPath,String targerPath) throws IOException {debugLog("图片开始添加水印文字");// 1、读取源图片,Image获取图片宽度、高度Image scrImg = ImageIO.read(new File(srcImgPath));BufferedImage buffImg = new BufferedImage(scrImg.getWidth(null), scrImg.getHeight(null), BufferedImage.TYPE_INT_RGB);// 2、得到画笔对象Graphics2D graphics = buffImg.createGraphics();// 3、设置对线段的锯齿状边缘处理graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);graphics.drawImage(scrImg.getScaledInstance(scrImg.getWidth(null), scrImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);// 4、设置水印倾斜度,这里是在图片的对角线上// 对角线长度lengthOfDiagonaldouble lengthOfDiagonal = Math.sqrt(Math.pow(buffImg.getWidth(), 2) + Math.pow(buffImg.getHeight(), 2));double v = (Math.pow(buffImg.getWidth(), 2) + Math.pow(lengthOfDiagonal, 2) - Math.pow(buffImg.getHeight(), 2)) / (2 * buffImg.getWidth() * lengthOfDiagonal);//get到了一个弧度数double acos = Math.acos(v);double myDegree = Math.toDegrees(acos);//这里的负号决定对角线-Math.toRadians(myDegree)graphics.rotate(-Math.toRadians(myDegree),(double) buffImg.getWidth() / 2,(double) buffImg.getHeight() / 2);// 5、设置水印文字颜色graphics.setColor(Color.DARK_GRAY);// 6、获取源图片的宽度和高度int width = scrImg.getWidth(null);int heigth = scrImg.getHeight(null);graphics.setFont(new Font("微软雅黑", Font.BOLD, 50));//8、设置透明度graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,0.2f));//9、设置文字位置FontDesignMetrics metrics = FontDesignMetrics.getMetrics(graphics.getFont());//获取文字宽度int strWidth = metrics.stringWidth(logoText);int xNum = width / strWidth + 1;int yNum = heigth / 50 + 1;int split = 50;for (int i = 1; i <= 2 * yNum; i++) {int y = -heigth + 50 * i + 5 * split * i;for (int j = 0; j < xNum; j++) {int x = strWidth * j + 3 * split * j;graphics.drawString(logoText, x, y);}}//11、释放资源graphics.dispose();//12、生成图片try {OutputStream os = null;os = new FileOutputStream(targerPath);ImageIO.write(buffImg, "jpg", os);} catch (FileNotFoundException e) {e.printStackTrace();}debugLog("图片完成添加水印文字");}
平时会更一些日常工作中遇到的问题,以此来记录自己的成长。
下期见面!Bye!
JAVA添加水印,平铺和斜对角线我都有!相关推荐
- 游戏建模 | 适用于设计师制作平铺材质(Zbrush砖石平铺)
在我们次世代场景案例制作中,会大量使用到四方连续的平铺贴图.在传统方法中,可以使用照片在PS中位移制作得出.或者是其他软件如B2M等自动制作平铺效果.这种方法有一定的缺陷首先照片素材要求高,找不到合适 ...
- 在Java生成的html页面加水印,Java在Excel中添加水印的实现(单一水印、平铺水印)...
在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...
- Java实现图片水印文字换行、平铺、旋转效果
Java代码实现对图片的水印文字的添加. 水印的效果是:水印文字的换行.水印文字的平铺.水印文字的旋转. import java.awt.Color; import java.awt.Font; im ...
- java pdf水印排布问题_Java实现pdf文件添加水印,铺满全页。
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/duan1309/article/details/81232300 因项目需要将word文件(.doc ...
- Java 在PPT中添加文本水印的简易方法(单一/平铺水印)
[前言] 在PPT幻灯片中,可通过添加形状的方式,来实现类似水印的效果,可添加单一文本水印效果,即在幻灯片中心位置水印以单个文本字样显示,但通过一定方法也可以添加多行(平铺)文本水印效果,即在幻灯片中 ...
- java实现图片平铺倾斜水印效果--转载
转载地址--java实现图片平铺倾斜水印效果_java_clh的博客-CSDN博客_java图片平铺 效果图: public static void main(String[] args) throw ...
- Java 设置PDF平铺图片背景(水印)
一.概述及环境准备 本文介绍使用免费版PDF库-Free Spire.PDF for Java加载图片来设置成PDF平铺图片背景的效果,也可以作为平铺图片水印来使用:编辑代码前,需要先导入jar文件, ...
- java 背景图片自适应_java 背景图片随窗口大小变化进行自动缩放及平铺 | 学步园...
最近一直被这个问题困扰这,上网也搜了不少这方面的知识,发现很多人都说用reapint方法(很简单的)进行图片重绘就OK了(没源码),于是乎至今也没实现 但通过自己的摸索也确实学到了不少东东滴! 在看代 ...
- Java实现pdf文件添加水印,铺满全页。
因项目需要将word文件(.doc,.docx,.rtf)转换成pdf文件并添加水印,铺满全页. 现就将为pdf文件添加水印提取出来,word文件转换成pdf文件,网上的教程很多,如需需要联系我即可. ...
最新文章
- Salesforce Lightning开发学习(二)Component组件开发实践
- linux实验磁盘管理,从0到1学习网络安全 【Linux实验篇-LVM 磁盘管理】
- H5新特性 input type=date 在手机上默认提示显示无效解决办法
- 1. 列维过程的混沌及可料表示(1)
- android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar
- mysql or优化_MySQL 语句优化
- Spring Boot 高效入门实战
- linux 文件乱码_RedHatlinux系统虚机启动后/etc/fstab中的文件系统未能挂载上
- 几个用于更精细判断敛散性的级数
- vbs if 不等于_(四)if 判断与逻辑运算符
- 地址省市县三级联动------数据库设计
- JS信用卡真实利率计算器
- 4k电视测试软件64,2017年四款看4k视频软件推荐,智能电视必备!
- [异步图书].Python机器学习:预测分析核心算法.pdf
- 74HC138 三八译码器
- linux ov7725模块驱动,stm32f4 驱动ov7725摄像头,使用dcmi一直无法产生中断
- 【问题记录与解决】jupyter notebook 无法重命名,无法运行测试代码 || jupyter notebook 中常用的两个快捷键。
- 盲盒小程序的开发功能介绍,优势有哪些
- php 计算百分比,百分比计算器
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第3部分