这段代码中能解决重复添加水印的问题吗?每次添加水印之前先清空水印
import com.engine.doc.util.WaterMarkUtil;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import weaver.file.util.FileDeleteUtil;
import weaver.general.BaseBean;
import weaver.general.GCONST;
import weaver.general.Util;
import weaver.hrm.User;
public class ImageMarkTwoUtil {
public ImageMarkTwoUtil() {
}
public static void createMark(String var0, String var1, String var2, Color var3, float var4, String var5, int var6, int var7, Color var8) {
String var9 = var1.contains(".") ? var1.substring(var1.lastIndexOf(".")) : ".JPG";
createMarkForPic2(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9);
}
public static void createMarkForPic1(String var0, String var1, String var2, Color var3, float var4, String var5, int var6, int var7, Color var8) {
String var9 = var1.contains(".") ? var1.substring(var1.lastIndexOf(".")) : ".JPG";
createMarkForPic2(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9);
}
public static void createMarkForPic2(String var0, String var1, String var2, Color var3, float var4, String var5, int var6, int var7, Color var8, String var9) {
createMarkForPic2(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9, (Map)null);
}
public static void createMarkForPic2(String var0, String var1, String var2,
Color var3, float var4, String var5,
int var6, int var7, Color var8,
String var9, Map<String, Object> var10) {
// 强制覆盖参数以满足需求
var6 = 12; // 固定为12pt(Word 5号字)
int repeatTimes = 3; // 固定绘制3次
int startX = 30; // 左上角X起始位置
int startY = 30; // 左上角Y起始位置
int stepY = 40; // 每次绘制的垂直间距
// 修复点:在方法开始处声明并初始化为null
FileOutputStream var11 = null;
try {
// 原代码读取图片逻辑
BufferedImage var22 = ImageIO.read(new File(var0));
int var23 = var22.getWidth(null);
int var24 = var22.getHeight(null);
BufferedImage var25 = new BufferedImage(var23, var24, BufferedImage.TYPE_INT_RGB);
Graphics2D var26 = var25.createGraphics();
var26.drawImage(var22, 0, 0, var23, var24, null);
// 设置字体(强制12pt加粗)
var26.setFont(new Font(var5, Font.BOLD, var6));
FontMetrics var34 = var26.getFontMetrics();
// 设置抗锯齿
var26.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// 设置透明度(保留原参数var4)
var26.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, var4));
// 修改后的绘制逻辑(3次绘制+白字黑边)
for (int i = 0; i < repeatTimes; i++) {
int currentY = startY + (i * stepY);
// 绘制黑色描边
var26.setColor(Color.BLACK);
var26.drawString(var2, startX-1, currentY-1);
var26.drawString(var2, startX+1, currentY-1);
var26.drawString(var2, startX-1, currentY+1);
var26.drawString(var2, startX+1, currentY+1);
// 绘制白色文字
var26.setColor(Color.WHITE);
var26.drawString(var2, startX, currentY);
}
var26.dispose();
// 输出文件
var11 = new FileOutputStream(var1); // 在此处初始化
String var50 = "JPG";
if (var9.indexOf(".") != -1) {
var50 = var9.substring(var9.lastIndexOf(".") + 1);
}
ImageIO.write(var25, var50, var11);
} catch (Exception var47) {
var47.printStackTrace();
} finally {
try {
if (null != var11) {
var11.close();
}
} catch (Exception var46) {
var46.printStackTrace();
}
}
}
public static File startMark(InputStream var0, String var1, String var2) {
try {
BaseBean var3 = new BaseBean();
String var4 = Util.null2String(var3.getPropValue("PdfWaterMarkSet", "htmlwaterFont"));
try {
var4 = new String(var4.getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception var15) {
var4 = "Microsoft YaHei";
}
String var5 = Util.null2String(var3.getPropValue("PdfWaterMarkSet", "htmlwaterColor"));
try {
var5 = new String(var5.getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception var14) {
var5 = "222,222,222";
}
int var6 = 222;
int var7 = 222;
int var8 = 222;
if (!"".equals(var5) && var5.indexOf(",") > 0) {
String[] var9 = var5.split(",");
if (var9 != null && var9.length >= 3) {
var6 = Util.getIntValue(var9[0]);
var7 = Util.getIntValue(var9[1]);
var8 = Util.getIntValue(var9[2]);
}
}
String var17 = getTargetFilePath(var2);
File var10 = new File(var17);
inputstreamtofile(var0, var10);
String var11 = getTargetFilePath(var2);
createMark(var17, var11, var1, (Color)null, 1.0F, var4, 25, 0, new Color(var6, var7, var8));
File var12 = new File(var17);
(new FileDeleteUtil()).deleteFile(var12);
(new FileDeleteUtil()).deleteFile(var10);
File var13 = new File(var11);
if (var13.exists()) {
var0.close();
return var13;
}
} catch (Exception var16) {
var16.printStackTrace();
}
return null;
}
public static File addSystemImgwmForPic(InputStream var0, String var1, String var2, User var3) {
BufferedImage var4 = null;
try {
HashMap var5 = new HashMap();
var5.put("isconvert", "1");
var5.put("document", "document");
Map var6 = WaterMarkUtil.getWmSetting(var5, var3);
Map var7 = (Map)var6.get("wmSetting");
String var8 = Util.null2String(var7.get("opacity"));
String var9 = Util.null2String(var7.get("rotate"));
String var10 = Util.null2String(var7.get("wmwidth"));
String var11 = Util.null2String(var7.get("wmheight"));
int var12 = Util.getIntValue(var8);
int var13 = Util.getIntValue(var9);
int var14 = Util.getIntValue(var10);
int var15 = Util.getIntValue(var11);
String var16 = getTargetFilePath(var2);
File var17 = new File(var16);
inputstreamtofile(var0, var17);
String var18 = getTargetFilePath(var2);
var4 = ImageIO.read(var17);
int var19 = var4.getWidth((ImageObserver)null);
int var20 = var4.getHeight((ImageObserver)null);
BufferedImage var21 = new BufferedImage(var19, var20, 1);
Graphics2D var22 = var21.createGraphics();
var22.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
var22.drawImage(var4.getScaledInstance(var19, var20, 4), 0, 0, (ImageObserver)null);
ImageIcon var23 = new ImageIcon(var1);
Image var24 = var23.getImage();
var22.rotate(Math.toRadians((double)(-var13)), (double)var21.getWidth() / 2.0D, (double)var21.getHeight() / 2.0D);
float var25 = (float)var12 / 100.0F;
var22.setComposite(AlphaComposite.getInstance(10, var25));
int var26 = var20 / var15;
int var27 = var19 / var14;
for(int var28 = 0; var28 < var26 + 1; ++var28) {
for(int var29 = 0; var29 < var27 + 1; ++var29) {
var22.drawImage(var24, var14 * (var29 + 1) - var14 / 2, var15 * (var28 + 1) - var15 / 2, (ImageObserver)null);
}
}
var22.setComposite(AlphaComposite.getInstance(3));
var22.dispose();
File var32 = new File(var18);
ImageIO.write(var21, "jpg", var32);
File var33 = new File(var16);
(new FileDeleteUtil()).deleteFile(var33);
(new FileDeleteUtil()).deleteFile(var17);
File var30 = new File(var18);
if (var30.exists()) {
var0.close();
return var30;
}
} catch (IOException var31) {
var31.printStackTrace();
}
return null;
}
public static File addSystemWaterForPic(InputStream var0, String var1, String var2, User var3) {
HashMap var4 = new HashMap();
var4.put("isconvert", "1");
var4.put("document", "document");
Map var5 = WaterMarkUtil.getWmSetting(var4, var3);
Map var6 = (Map)var5.get("wmSetting");
String var7 = Util.null2String(var5.get("familyname"));
String var8 = Util.null2String(var6.get("fontsize"));
String var9 = Util.null2String(var6.get("color"));
int var10 = Util.getIntValue(var8);
try {
new BaseBean();
String var12 = var7;
try {
new String(var12.getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception var23) {
var12 = "Microsoft YaHei";
}
String var13 = WaterMarkUtil.stringtoRGB(var9);
try {
var13 = new String(var13.getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception var22) {
var13 = "222,222,222";
}
int var14 = 128;
int var15 = 128;
int var16 = 128;
if (!var13.isEmpty() && var13.indexOf(",") > 0) {
String[] var17 = var13.split(",");
if (var17 != null && var17.length >= 3) {
var14 = Util.getIntValue(var17[0]);
var15 = Util.getIntValue(var17[1]);
var16 = Util.getIntValue(var17[2]);
}
}
String var25 = getTargetFilePath(var2);
File var18 = new File(var25);
inputstreamtofile(var0, var18);
String var19 = getTargetFilePath(var2);
createMarkForPic2(var25, var19, var1, (Color)null, 1.0F, var7, var10, 10, new Color(var14, var15, var16), var2, var6);
File var20 = new File(var25);
(new FileDeleteUtil()).deleteFile(var20);
(new FileDeleteUtil()).deleteFile(var18);
File var21 = new File(var19);
if (var21.exists()) {
var0.close();
return var21;
}
} catch (Exception var24) {
var24.printStackTrace();
}
return null;
}
public static File startMarkForPic(InputStream var0, String var1, String var2) {
try {
BaseBean var3 = new BaseBean();
String var4 = Util.null2String(var3.getPropValue("PdfWaterMarkSet", "htmlwaterFont"));
try {
var4 = new String(var4.getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception var15) {
var4 = "Microsoft YaHei";
}
String var5 = Util.null2String(var3.getPropValue("PdfWaterMarkSet", "htmlwaterColor"));
try {
var5 = new String(var5.getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception var14) {
var5 = "222,222,222";
}
int var6 = 222;
int var7 = 222;
int var8 = 222;
if (!"".equals(var5) && var5.indexOf(",") > 0) {
String[] var9 = var5.split(",");
if (var9 != null && var9.length >= 3) {
var6 = Util.getIntValue(var9[0]);
var7 = Util.getIntValue(var9[1]);
var8 = Util.getIntValue(var9[2]);
}
}
String var17 = getTargetFilePath(var2);
File var10 = new File(var17);
inputstreamtofile(var0, var10);
String var11 = getTargetFilePath(var2);
createMarkForPic2(var17, var11, var1, (Color)null, 1.0F, var4, 15, 10, new Color(var6, var7, var8), var2);
File var12 = new File(var17);
(new FileDeleteUtil()).deleteFile(var12);
(new FileDeleteUtil()).deleteFile(var10);
File var13 = new File(var11);
if (var13.exists()) {
var0.close();
return var13;
}
} catch (Exception var16) {
var16.printStackTrace();
}
return null;
}
private static String getTargetFilePath(String var0) {
String var1 = GCONST.getRootPath() + "filesystem" + File.separatorChar + "docWaterMarkTemp";
File var2 = new File(var1);
if (!var2.exists() && !var2.isDirectory()) {
var2.mkdirs();
}
UUID var3 = UUID.randomUUID();
var1 = var1 + File.separatorChar + var3.toString() + var0;
return var1;
}
private static void inputstreamtofile(InputStream var0, File var1) {
try {
FileOutputStream var2 = new FileOutputStream(var1);
boolean var3 = false;
byte[] var4 = new byte[8192];
int var6;
while((var6 = var0.read(var4, 0, 8192)) != -1) {
var2.write(var4, 0, var6);
}
var2.close();
var0.close();
} catch (Exception var5) {
var5.printStackTrace();
}
}
public static void drawString(Graphics2D var0, String var1, float var2, float var3, int var4, float var5, float var6, boolean var7, boolean var8) {
if (var1 != null && var1.length() != 0) {
if (var7) {
var1 = var1.replaceAll("\\n+", "\n").trim();
}
if (var8) {
var1 = " " + var1.replaceAll("\\n", "\n ");
}
drawString(var0, var1, var2, var3, var4, var5, var6);
}
}
public static void drawString(Graphics2D var0, String var1, float var2, float var3, int var4, float var5, float var6) {
if (var1 != null && var1.length() != 0) {
FontMetrics var7 = var0.getFontMetrics();
StringBuilder var8 = new StringBuilder();
for(int var9 = 0; var9 < var1.length(); ++var9) {
char var10 = var1.charAt(var9);
var8.append(var10);
int var11 = var7.stringWidth(var8.toString());
if (var10 == '\n' || (float)var11 > var3) {
if (var10 == '\n') {
++var9;
}
if (var4 > 1) {
var0.drawString(var1.substring(0, var9), var5, var6);
drawString(var0, var1.substring(var9), var2, var3, var4 - 1, var5, var6 + var2);
} else {
var0.drawString(var1.substring(0, var9 - 1) + "…", var5, var6);
}
return;
}
}
var0.drawString(var1, var5, var6);
}
}
public static ByteArrayOutputStream getOutputStream(InputStream var0) throws IOException {
ByteArrayOutputStream var1 = new ByteArrayOutputStream();
try {
byte[] var2 = new byte[1024];
int var3;
while((var3 = var0.read(var2)) > -1) {
var1.write(var2, 0, var3);
}
var1.flush();
} catch (Exception var4) {
}
return var1;
}
}