https://blog.csdn.net/zhengsaisai/article/details/69389675
今日需要实现图片添加水印功能,由于网站使用的编辑器是百度的开源编辑器ueditor,上网查询资料后发现很麻烦,需要修改的地方比较多,好吧,其实我是看不懂那些修改的代码。。。。。。。。。。。。。。。。。。。。。。。。。。。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
上网找了一个为图片添加水印的工具类,测试了一下发现还挺不错,于是就添加到了项目里。
具体实现如下:
工具类代码如下:
-
package com.howin.util;
-
import java.awt.AlphaComposite;
-
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.OutputStream;
-
import javax.imageio.ImageIO;
-
import javax.swing.ImageIcon;
-
/**
-
* 图片水印
-
* @blog http://sjsky.iteye.com
-
* @author Michael
-
*/
-
public class ImageMarkLogoByIcon {
-
/**
-
* @param args
-
*/
-
// public static void main(String[] args) {
-
// String srcImgPath = "f:/img/1.png";
-
// String iconPath =
-
// String targerPath = "f:/img/sy01.png";
-
// String targerPath2 = "f:/img/sy02.png";
-
// // 给图片添加水印
-
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath);
-
// // 给图片添加水印,水印旋转-45
-
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2,
-
// -45);
-
//
-
// }
-
/**
-
* 给图片添加水印
-
* @param iconPath 水印图片路径
-
* @param srcImgPath 源图片路径
-
* @param targerPath 目标图片路径
-
*/
-
public static void markImageByIcon(String iconPath, String srcImgPath,
-
String targerPath) {
-
markImageByIcon(iconPath, srcImgPath, targerPath, null);
-
}
-
/**
-
* 给图片添加水印、可设置水印图片旋转角度
-
* @param iconPath 水印图片路径
-
* @param srcImgPath 源图片路径
-
* @param targerPath 目标图片路径
-
* @param degree 水印图片旋转角度
-
*/
-
public static void markImageByIcon(String iconPath, String srcImgPath,
-
String targerPath, Integer degree) {
-
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);
-
// 得到画笔对象
-
// Graphics g= buffImg.getGraphics();
-
Graphics2D g = buffImg.createGraphics();
-
// 设置对线段的锯齿状边缘处理
-
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);
-
if (null != degree) {
-
// 设置水印旋转
-
g.rotate(Math.toRadians(degree),
-
(double) buffImg.getWidth() / 2, (double) buffImg
-
.getHeight() / 2);
-
}
-
// 水印图象的路径 水印一般为gif或者png的,这样可设置透明度
-
ImageIcon imgIcon = new ImageIcon(iconPath);
-
// 得到Image对象。
-
Image img = imgIcon.getImage();
-
float alpha = 0.5f; // 透明度
-
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
-
alpha));
-
// 表示水印图片的位置
-
g.drawImage(img,300, 300, null);
-
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
-
g.dispose();
-
os = new FileOutputStream(targerPath);
-
//水印添加完成,删除源文件,开始生成添加水印照片
-
File file = new File(targerPath);
-
file.delete();
-
// 生成图片
-
ImageIO.write(buffImg, "JPG", os);
-
System.out.println("图片完成添加Icon印章。。。。。。");
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
if (null != os)
-
os.close();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
修改com.baidu.uedior 包下的ActionEnter.java 中的exec()方法。
将else中的代码修改为:
https://blog.csdn.net/zhengsaisai/article/details/69389675
[java] view plain copy
- <code class="language-java"> /**
- * 给图片添加水印
- * @param iconPath 水印图片路径
- * @param srcImgPath 源图片路径
- * @param targerPath 目标图片路径
- */
- String a = this.invoke();
- String sy = a.substring(11, 18);
- if(sy.equals("SUCCESS")){
- String srcImgPath = "F:/eclipseworkspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GeekOA/"+a.substring(a.indexOf("url")+7, a.length()-2);//获取图片源地址
- //调用方法添加水印
- ImageMarkLogoByIcon icon = new ImageMarkLogoByIcon();
- String iconPath = "f:/img/geek.png";//水印图片路径
- icon.markImageByIcon(iconPath, srcImgPath, srcImgPath);//此处第三、第二个参数一样,都是图片源路径,这样写是为了将原图片替换为添加水印后的图片
- }
- return a;
- }</code>
水印添加效果:红色圈中的