图片添加图片水印和文字水印
前言:最近需要对图片添加文字水印和图片水印,而且要根据原图片不同的大小,打上不同的大小的水印和文字,保证用户在视觉上看到的水印的大小是一致的。
话不多说,上代码,先上处理图片的代码
/**
* @author: Aubergine
* @date: 2018/10/28 11:57
* @param srcImage 原图片的地址
* @param pressImg 水印图片
* @param pressText 水印文字
* @param color 字体的颜色
* @param font 字体的大小
* @param alpha 模糊度
* @return
*/
public BufferedImage pressText(File srcImage, Image pressImg, String pressText, Color color,Font font, float alpha) {
final BufferedImage destImage = ImageUtil.read(srcImage);
final Graphics2D gf = destImage.createGraphics();
// 抗锯齿
gf.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
gf.setColor(color);
gf.setFont(font);
// 透明度
gf.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 在指定坐标绘制水印文字
FontMetrics metrics = gf.getFontMetrics(font);
int textLength = metrics.stringWidth(pressText);
int textHeight = metrics.getAscent() - metrics.getLeading() - metrics.getDescent();
gf.drawString(pressText, destImage.getWidth() - textLength, destImage.getHeight() - (textHeight / 2));
gf.dispose();
int width = destImage.getWidth((ImageObserver) null);
int height = destImage.getHeight((ImageObserver) null);
BufferedImage destImage2 = new BufferedImage(width, height, 1);
Graphics2D g = destImage2.createGraphics();
g.drawImage(destImage, 0, 0, width, height, (ImageObserver) null);
int pressImgWidth = pressImg.getWidth((ImageObserver) null);
int pressImgHeight = pressImg.getHeight((ImageObserver) null);
int x = (width - pressImgWidth) - textLength - 5;
int y = (height - pressImgHeight);
g.setComposite(AlphaComposite.getInstance(10, alpha));
// 给图片打上图片水印
g.drawImage(pressImg, x, y, pressImgWidth, pressImgHeight, (ImageObserver) null);
g.dispose();
return destImage2;
}
调用的时候这样用
// 原图尺寸 3800*2850
ImageUtil.write(pressText(cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-3800-2850.jpg"),
ImageUtil.read(new File("C:\\Users\\Administrator\\Desktop\\newlog\\116_116.png")),
"@版权版权", Color.WHITE,
new Font("微软雅黑", Font.BOLD, 86),
1f), cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-3800-2850-r.jpg"));
// 原图尺寸是 1500*760
ImageUtil.write(pressText(FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-1500-760.jpg"),
ImageUtil.read(new File("C:\\Users\\Administrator\\Desktop\\newlog\\58_58.png")),
"@版权版权", Color.WHITE,
new Font("微软雅黑", Font.BOLD, 42),
1f), cn.hutool.core.io.FileUtil.file("C:\\Users\\Administrator\\Desktop\\1-1500-760-r.jpg"));
PS:推荐一个比较好的JAVA工具包hutool,里面有很多的小工具,在开发的过程中使用很方便。