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

下面讲实现方法:

第一步:使用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 block

e.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 水印图片地址 uploadPath 上传成功后文件地址

*/

//修改默认参数

//ImageMarkUtil.setImageMarkOptions(0.0f, 0,

20);

//ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);

System.out.println("..添加水印图片结束...");

}

}

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

/**

* watermarkPath 水印图片地址

* uploadPath 上传成功后文件地址

*/

ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);如果你觉得水印间隔太近了,可以通过下面代码设置间隔:

//修改默认参数

ImageMarkUtil.setImageMarkOptions(0.0f, 0,

20);

ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java 文字水印 旋转_java实现倾斜水印铺满整张图相关推荐

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

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

  2. java文字水印换行_Java实现图片水印文字换行、平铺、旋转效果-Go语言中文社区...

    import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; impo ...

  3. Java苹果手机缩略图旋转_Java实例使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)...

    1 需求 表哥需要给儿子报名考试,系统要求上传不超过30KB的图片,而现在的手机随手一拍就是几MB的,怎么弄一个才30KB的图片呢? 一个简单的办法是在电脑上把图片缩小,然后截屏小图片,但现在的电脑屏 ...

  4. java 水印排版_java图片加水印代码 最好有实例!!!先谢了!!

    展开全部 文字水印 import java.awt.*; import java.awt.image.*; import java.io.*; import javax.swing.*; import ...

  5. java swing 图片旋转_Java图片旋转,背景透明化

    import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.Buffere ...

  6. java 文字转语音_java 实现文字转语音 -仅限windows系统

    1. 下载资源jacob 将.dll文件添加到jre下的bin文件夹下 64位操作系统选择jacob-1.18-x64.dll文件 32位操作系统选择jacob-1.18-x86.dll 链接:htt ...

  7. java gui 布局 旋转_JAVA GUI编程之布局管理器

    JAVA的GUI(图形用户界面)由各种组件构成,主要分为AWT组件(java.awt)以及功能更强的Swing组件(javax.swing)两种. 组件可以分为容器组件和非容器组件.容器组件是指可以包 ...

  8. java 实现图片旋转_java实现图片旋转

    方法一:普通方法实现图片旋转 /** * 图像旋转 * @param src * @param angel * @return */ public static BufferedImage Rotat ...

  9. python和java图片_Java好还是Python好?一张图告诉你!

    某同学问小智:"小智小智,学Java好还是学Python好?" 小智跑去问大神(90度鞠躬):"大神,大神,学Java好还是学Python好?" 大神嫌弃的看了 ...

  10. java控制分屏_java实现arcgis地图分屏(双图)

    java实现arcgis地图分屏(双图) java实现arcgis地图分屏(双图) 本博文采用Java语言,利用arcgis api for javascript 4.16地图服务,实现地图分屏,直接 ...

最新文章

  1. Openstack安装部署
  2. 手机怎么下载python并安装-CentOS下python的下载及安装
  3. CODEVS-3303-翻转区间
  4. 中国女足绝地大逆转,爬取了微博评论区,评论很精彩
  5. windows7 64位环境下安装apache+mysql5.5+php7经验
  6. ASP.NET Core HTTP 管道中的那些事儿
  7. linker `cc` not found
  8. python调用系统_python 执行系统命令
  9. 作者:郑纬民,男,清华大学教授、博士生导师,中国计算机学会理事长。
  10. LeetCode 169. 多数元素 (哈希映射|投票算法)
  11. webpack vs gulp 一张图说明
  12. Linux基金会发布开源Hypervisor项目ACRN支持物联网设备开发
  13. python threading join_浅谈Python中threading join和setDaemon用法及区别说明
  14. PADS9.5实战攻略与高速PCB设计-强烈推荐教程资料(完整书签)
  15. ccd视觉定位教程_CCD视觉定位激光打标机的工作原理
  16. 手机做显示器服务器,华为MateView体验:手机做主机,显示器也能当电脑用
  17. 邻居表项的mcast_solicit数量
  18. WPS文档究竟有多好,不服一起跑个分?
  19. 影响一个系统性能的方方面面
  20. 重t2加权是什么意思_魔兽世界怀旧服:为什么BWL打不腻,TAQ没多久大家都AFK了?...

热门文章

  1. 高仓健电影《海峡》观后感
  2. 软件工程——软件开发步骤
  3. PS画实线、虚线箭头
  4. Excel2013使用插入特殊符号或复选框功能制作带对号的打钩方框
  5. md5加密特征码java,讨论:加密算法特征码及其识别
  6. Photoshop - CMYK 和 RGB 区别是什么?
  7. Adjoint of SE(3)
  8. 计算机一级怎么加波浪下划线,Word快速添加下划线,双下划线条、波浪线、虚线一键搞定...
  9. 如何做好数据分析师的职业规划?
  10. k3s 快速入门 - traefix 使用 - 1