Java添加图片水印

  • 2019-08-21
  • 4
  • 0

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

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

如图显示

具体代码如下

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添加图片水印

评论

还没有任何评论,你来说两句吧