import java.io. * ;
import java.text.DecimalFormat;
import java.awt. * ;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
/**
*
* @param srcImgPath 源文件路径
* @param newImagePath 输出图片路径
* @param markContent 水印内容
* @param color 水印颜色
*/
public static void markImage(String srcImgPath,String newImagePath,String markContent, Color color) {
//获取文件拓展名
String filename = srcImgPath.substring(srcImgPath.lastIndexOf("\\"));
String end = filename.substring(filename.lastIndexOf("."));
end = end.substring(1);
DecimalFormat df=new DecimalFormat("0.00"); //避免除法仅保留整数
InputStream is = null;
OutputStream os = null;
try {
java.awt.Image srcImg = ImageIO.read(new File(srcImgPath));
int width = srcImg.getWidth(null);
int height = srcImg.getHeight(null);
BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//得到画笔对象
Graphics2D g = buffImg.createGraphics();
/****不加png透明区域就是黑的****/
if(end.equals("png")) {
buffImg = g.getDeviceConfiguration().createCompatibleImage(srcImg.getWidth(null), srcImg.getHeight(null), Transparency.TRANSLUCENT);
g.dispose();
g = buffImg.createGraphics();
}
/****不加png透明区域就是黑的****/
//设置对线段的锯齿状边缘处理(貌似没什么用)
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), java.awt.Image.SCALE_SMOOTH), 0, 0, null);
//设置水印文字颜色
g.setColor(color);
//设置水印文字Font
Font f = new Font("黑体", Font.ITALIC, (int) Double.parseDouble(df.format((float)width/5000*240)));
g.setFont(f);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
for (int i = 1; i < 8; i++) {
if(i%2 != 0) {
g.drawString(markContent, (int)(width / 8), i * height / 8); // 添加水印的文字和设置水印文字出现的内容
} else if(i%2 == 0) {
g.drawString(markContent, (int)(width / 8 * 2), i * height / 8); // 添加水印的文字和设置水印文字出现的内容
}
}
g.dispose();
os = new FileOutputStream(newImagePath);
ImageIO.write(buffImg, end, os);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != is)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
PNG:
JPG