水印位置包括:居中、右下角、左上角、矩形
直接上代码:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* 给图片添加水印
* @author mahualong
* @param filename 上传文件名
* @param markImg 水印的文件名
* @param transParent 类型,居中、右下角、左上角、矩形
* @param markAngle 水印旋转角度,应在正负45度之间
* @throws IOException
*/
public static void markImage(String filename, String markImg, String transParent, double markAngle,Long siteId) throws IOException {
//矩形使用,-45可以反过来
// if (markAngle > 45 || markAngle < -45) {
// throw new RuntimeException("旋转角度必须在正负45度之间。");
// }
//@param margin_x 水印之间的水平间距
int margin_x=1;
//@param margin_y 水印之间的垂直间距
int margin_y=1;
String[] filenames = filename.split(";");
//当前文件路径
String originImgPath = "";
//当前水印文件路径
String markImgPath = ConfigUtil.getPublishPath("upload", siteId, 1, markImg);
for(int k=0;k<filenames.length;k++) {
originImgPath = ConfigUtil.getPublishPath("usertemp", filenames[k]);
//透明度
float opacity = Float.parseFloat("1");
//准备画板
BufferedImage originImg = ImageIO.read(new File(originImgPath));
//获取水印图片
BufferedImage markImage = ImageIO.read(new File(markImgPath));
//创建画笔
Graphics2D graphics = (Graphics2D) originImg.getGraphics();
//文字边缘平滑
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, opacity));
int canvasHeight = originImg.getHeight();
int canvasWidth = originImg.getWidth();
int markHeight = markImage.getHeight();
int markWidth = markImage.getWidth();
int interval = markWidth + markHeight;
//(x,y)用来指定图像image显示的位置
switch (transParent){
case "1"://左上角
//旋转多少度
graphics.rotate(0);
graphics.drawImage(markImage, 10, 10, markImage.getWidth(), markImage.getHeight(), null);
break;
case "2"://居中
//旋转多少度
graphics.rotate(0);
graphics.drawImage(markImage, (canvasWidth-markWidth)/2, (canvasHeight-markHeight)/2, markImage.getWidth(), markImage.getHeight(), null);
break;
case "3"://右下角
//旋转多少度
graphics.rotate(0);
graphics.drawImage(markImage, (canvasWidth-markWidth)-10, (canvasHeight-markHeight)-10, markImage.getWidth(), markImage.getHeight(), null);
break;
default://矩形
//旋转多少度
graphics.rotate(markAngle);
for (int i = -canvasHeight; i < canvasWidth + canvasHeight; i = i + interval + margin_x) {
for (int j = -canvasWidth; j < canvasHeight + canvasWidth; j = j + interval + margin_y) {
graphics.drawImage(markImage, i, j, markImage.getWidth(), markImage.getHeight(), null);
}
}
break;
}
graphics.dispose();
ImageIO.write(originImg, "png", new File(originImgPath));
}
}