今天遇到一个需求对上传的图铺满水印,在网上找了半天都是在指定位置设置水印,下面代码是我通过在网上找的代码,然后改造而成的。

我们先看一下效果图。

下面讲实现方法:

第一步:使用ps或美图软件设计水印图片,比如:

第二步:把下面代码放入类中:

package org.platform.framework.commons.util;import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;import com.founder.cms.watermark.util.ImageMarkLogoUtil;/*** * 生成水印* */
public class ImageMarkUtil {/** 水印透明度 */private static float alpha = 0.5f;/** 水印图片旋转角度 */private static double degree = 0f;private static int interval = 0;/*** 设置水印参数,不设置就使用默认值* * @param alpha*            水印透明度* @param degree*            水印图片旋转角度 ** @param interval*            水印图片间隔*/public static void setImageMarkOptions(float alpha, int degree,int interval) {if (alpha != 0.0f) {ImageMarkUtil.alpha = alpha;}if (degree != 0f) {ImageMarkUtil.degree = degree;}if (interval != 0f) {ImageMarkUtil.interval = interval;}}/*** 给图片添加水印图片* * @param waterImgPath*            水印图片路径* @param srcImgPath*            源图片路径* @param targerPath*            目标图片路径*/public static void waterMarkByImg(String waterImgPath, String srcImgPath,String targerPath) throws Exception {waterMarkByImg(waterImgPath, srcImgPath, targerPath, 0);}/*** 给图片添加水印图片* * @param waterImgPath*            水印图片路径* @param srcImgPath*            源图片路径* @param targerPath*            目标图片路径*/public static void waterMarkByImg(String waterImgPath, String srcImgPath) {try {waterMarkByImg(waterImgPath, srcImgPath, srcImgPath, 0);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 给图片添加水印图片、可设置水印图片旋转角度* * @param waterImgPath*            水印图片路径* @param srcImgPath*            源图片路径* @param targerPath*            目标图片路径* @param degree*            水印图片旋转角度*/public static void waterMarkByImg(String waterImgPath, String srcImgPath,String targerPath, double degree) throws Exception {OutputStream os = null;try {Image srcImg = ImageIO.read(new File(srcImgPath));BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);// 1、得到画笔对象Graphics2D g = buffImg.createGraphics();// 2、设置对线段的锯齿状边缘处理g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);// 3、设置水印旋转if (0 != degree) {g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);}// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度ImageIcon imgIcon = new ImageIcon(waterImgPath);// 5、得到Image对象。Image img = imgIcon.getImage();g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));// 6、水印图片的位置for (int height = interval + imgIcon.getIconHeight(); height < buffImg.getHeight(); height = height +interval+ imgIcon.getIconHeight()) {for (int weight = interval + imgIcon.getIconWidth(); weight < buffImg.getWidth(); weight = weight +interval+ imgIcon.getIconWidth()) {g.drawImage(img, weight - imgIcon.getIconWidth(), height- imgIcon.getIconHeight(), null);}}g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));// 7、释放资源g.dispose();// 8、生成图片os = new FileOutputStream(targerPath);ImageIO.write(buffImg, "JPG", os);System.out.println("图片完成添加水印图片");} catch (Exception e) {e.printStackTrace();} finally {try {if (null != os)os.close();} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) {System.out.println("..添加水印图片开始...");/*** watermarkPath 水印图片地址 加水印图片地址 上传成功后文件地址*///修改默认参数ImageMarkUtil.setImageMarkOptions(0.0f, 0,20);String watermarkPath = "d:/watermark.png";  //测试水印图片String imgPath = "d:/22.jpg";//测试需加水印图片ImageMarkUtil.waterMarkByImg(watermarkPath, imgPath);System.out.println("..添加水印图片结束...");}}

第三步:在实现上传成功的地方,调用该类,如:

/*** watermarkPath 水印图片地址* uploadPath 上传成功后文件地址*/ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);

如果你觉得水印间隔太近了,可以通过下面代码设置间隔:

//修改默认参数ImageMarkUtil.setImageMarkOptions(0.0f, 0,20);ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);

java实现斜水印铺满整张图相关推荐

  1. java 水印排版_java实现倾斜水印铺满整张图

    今天遇到一个需求对上传的图铺满水印,在网上找了半天都是在指定位置设置水印,下面代码是我通过在网上找的代码,然后改造而成的.我们先看一下效果图 下面讲实现方法: 第一步:使用ps或美图软件设计水印图片, ...

  2. 水印铺满_一张人民币水印纸的“争气”之路

    钞票利用水印纸防伪由来已久,自1666年斯德哥尔摩第一次发行带有特制水印的钞票至今,水印钞纸在人类近现代史上已走过了近四个世纪.目前世界公认最早的水印纸是1282年意大利造纸专家布法利诺发明的.它的原 ...

  3. word加水印铺满java,Word 2010文档中让水印铺满整个页面的设置方法

    在Word 2010中,通过简单的鼠标单击即可为文档添加水印,但这样只能在每一个文档页面内添加一个水印,这个在前面的文章已经有所介绍,具体请见:Word文档添加内置水印.个性化图片及文字水印的方法,但 ...

  4. word文字铺满页面_Word 2010文档中让水印铺满整个页面的设置方法

    在Word 2010中,通过简单的鼠标单击即可为文档添加水印,但这样只能在每一个文档页面内添加一个水印,这个在前面的文章已经有所介绍,具体请见:Word文档添加内置水印.个性化图片及文字水印的方法,但 ...

  5. Word中表格如何均匀铺满整页

    Word中表格如何均匀铺满整页 目录 Word中表格如何均匀铺满整页 1.像这样的半页表格如何铺满整页 2.将表格最后一行框线拖至word文档底部 ​3.点击左上角"全选"图标选中 ...

  6. java monogodb 图片 pdf 下载添加单个水印 铺满水印

    这是基于monogodb 下载后添加水印的介绍  不管你现在用的是本地下载还是其他的服务器 输出后的结果都是添加水印 基本的操作一样的都是通过流下载的然后添加水印 ! 这边的所有操作都是基于这个官网的 ...

  7. 机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛

    问题描述: ROS 移动机器人建图后,用Navigation导航包执行 起始位置到 目标位置的路径规划和导航行走的过程中. 机器人导航初始化的时候,刚加载地图,如何让移动机器人执行 全局定位 glob ...

  8. 如何让网页背景图铺满整页(html+csss实现网页背景图铺满整页);a标签删下划线、禁用;innerHTMLouterHTML;css字体间距hover图片放大

    background背景图片设置 body {width: 100%;height: 100%;background: url(../images/bg.png) no-repeat;backgrou ...

  9. java工程师的一生_百看不厌之一张图诠释程序员的一生

    原标题:百看不厌之一张图诠释程序员的一生 01 百看不厌系列之一张图诠释程序员的一生. 02 变得越来越强了... 03 不知道是干什么的,但又不敢删... 04 当前端的人抱怨Java 时,C++程 ...

  10. vue 设置背景图地址_vue-生成自动铺满的背景图

    生成如上图的背景图 需要以下的代码: div部分: <template> <div class="bg" :style ="bg"> & ...

最新文章

  1. LeetCode实战:除自身以外数组的乘积
  2. ipvs -r02–restore02恢复虚拟服务器规则,ipvs 介绍
  3. 【学习笔记】36、lambda是单表达式函数
  4. 如何改变Idea的背景
  5. 缓冲文件系统(fopen/fread/fwrite)和非缓冲文件系统(open/read/write)
  6. 循环神经网络——裁剪梯度(应对梯度爆炸)
  7. linux命令 bind,Linux bind命令
  8. 【Luogu2085】最小函数值(优先队列)
  9. cmake之交叉编译arm32/arm64(四)
  10. 什么样的公司卖什么货!
  11. oracle 切换cdb,CDB与PDB之间的切换方法
  12. AI洞观 | 一文读懂2018安博会四大趋势
  13. 电子学会2022年9月青少年软件编程(图形化)等级考试试卷(三级)答案解析
  14. 供应链金融融资的业务模式
  15. 文献(5): 单细胞转录组揭示人类纤维化皮肤病中成纤维细胞的异质性
  16. 教学方法(学科教学法)
  17. 【黄啊码】php结合redis实现商城在线秒杀抢购
  18. linux下mysql(rpm)安装使用手册
  19. 基于MATLAB APP Designer 和 Python 的音视频剪辑App_02
  20. luogu P4848 崂山白花蛇草水

热门文章

  1. 福尔曼大学计算机排名,留学选校指南|纽约时报2019美国精英群体认可的大学榜单Top50...
  2. 堪萨斯州立大学计算机科学,2020年堪萨斯州立大学排名TFE Times美国最佳计算机科学硕士专业排名第99...
  3. 【搞个事】主页被劫持,改注册表进行修复
  4. 【BZOJ2813】奇妙的Fibonacci(结论,线性筛)
  5. electron制作聊天界面(仿制qq)
  6. 怎么读取cf卡id_simotion读写CF卡,保存/读取变量
  7. 2016 server win 假死_Windows10出现假死的几种表现形式及对应解决方案
  8. 浏览器调用html5播放器,html5视频播放器的浏览器兼容处理方法 - 小俊学习网
  9. C++训练:自由落体问题
  10. 机顶盒系统升级服务器地址,tvbox