Java添加图片水印

在网络中的很多地方都有水印的存在,比如微信公众号上面的图片等……….所以,看看自己能否写一个可以给图片添加水印的工具类。

先来一个简单的水印添加代码,将图片的来源的地址以及介绍添加到图片的右下脚。

如图显示

具体代码如下

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class ImageUtil {
  /**
   * 添加水印
   * 
   * @param srcImgPath       原图片地址
   * @param tarImgPath       添加水印后的图片地址
   * @param waterMarkContent 水印内容集合
   * @param markContentColor 颜色
   * @param font             字体
   */
  public static void addWaterMark(String srcImgPath, String tarImgPath, List<String> waterMarkContentList,
      Color markContentColor, Font font) {
    try {
      // 读取原图片信息
      File srcImgFile = new File(srcImgPath);
      Image srcImg = ImageIO.read(srcImgFile);
      // 获取宽、高
      int srcImgWidth = srcImg.getWidth(null);
      int srcImgHeight = srcImg.getHeight(null);
      // 添加水印
      BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
      Graphics2D g = bufImg.createGraphics();
      g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
      g.setColor(markContentColor); // 根据图片的背景设置水印颜色
      g.setFont(font); // 设置字体
      int maxLength = 0;
      // 先循环获取最长的水印长度
      for (String waterMarkConten : waterMarkContentList) {
        int watermarkLength = getWatermarkLength(waterMarkConten, g);
        if (watermarkLength > maxLength) {
          maxLength = watermarkLength;
        }
      }
      // 开始绘画水印
      for (int i = 0; i < waterMarkContentList.size(); i++) {
        String content = waterMarkContentList.get(i);
        // 设置水印的坐标
        int x = srcImgWidth - maxLength;
        int y = srcImgHeight - ((i + 1) * font.getSize());
        g.drawString(content, x, y); // 画出水印
      }
      g.dispose();
      // 输出图片
      FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
      ImageIO.write(bufImg, "jpg", outImgStream);
      outImgStream.flush();
      outImgStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
    return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
  }
  public static void main(String[] args) {
    Font font = new Font("微软雅黑", Font.PLAIN, 25); // 水印字体
    String srcImgPath = "c://1.jpg"; // 源图片地址
    String tarImgPath = "c://2.jpg"; // 待存储的地址
    List<String> contentList = new ArrayList<String>();
    contentList.add("Java添加图片水印");
    contentList.add("图片来源:https://blog.mojxtang.com/");
    Color color = new Color(255, 255, 255, 100); // 水印图片色彩以及透明度
    addWaterMark(srcImgPath, tarImgPath, contentList, color, font);
  }
}

本文地址:Java添加图片水印

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值