返回

《图片水印,仅需几行代码,快速实现图片加水印》

后端

Java实现添加文字水印和图片水印功能

概述

水印是保护数字图像版权和所有权的一种有效方式。在Java中,可以使用Graphics2D类轻松地添加文字和图片水印到图像中。本文将深入探讨如何实现这两种水印技术,并提供示例代码。

文字水印

文字水印涉及在图像上叠加文本。它可以用来声明所有权、提供附加信息或防止盗用。

代码示例

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class TextWatermark {

    public static void main(String[] args) throws Exception {
        // 读取原始图像
        BufferedImage image = ImageIO.read(new File("image.jpg"));

        // 创建Graphics2D对象
        Graphics2D g2d = image.createGraphics();

        // 设置水印文本和样式
        String watermark = "版权所有";
        Font font = new Font("Arial", Font.BOLD, 30);
        g2d.setFont(font);
        g2d.setColor(Color.RED);

        // 计算并绘制水印文本
        int width = image.getWidth();
        int height = image.getHeight();
        int textWidth = g2d.getFontMetrics().stringWidth(watermark);
        int textHeight = g2d.getFontMetrics().getHeight();
        g2d.drawString(watermark, (width - textWidth) / 2, (height - textHeight) / 2);

        // 释放Graphics2D对象
        g2d.dispose();

        // 写入带水印的图像
        ImageIO.write(image, "jpg", new File("image_with_watermark.jpg"));
    }
}

图片水印

图片水印涉及在图像上叠加另一个图像。它通常用于防止篡改或盗用,因为去除图片水印非常困难。

代码示例

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class ImageWatermark {

    public static void main(String[] args) throws Exception {
        // 读取原始图像和水印图像
        BufferedImage image = ImageIO.read(new File("image.jpg"));
        BufferedImage watermark = ImageIO.read(new File("watermark.png"));

        // 创建Graphics2D对象
        Graphics2D g2d = image.createGraphics();

        // 绘制水印图像
        int width = image.getWidth();
        int height = image.getHeight();
        int watermarkWidth = watermark.getWidth();
        int watermarkHeight = watermark.getHeight();
        g2d.drawImage(watermark, (width - watermarkWidth) / 2, (height - watermarkHeight) / 2, null);

        // 释放Graphics2D对象
        g2d.dispose();

        // 写入带水印的图像
        ImageIO.write(image, "jpg", new File("image_with_watermark.jpg"));
    }
}

结论

通过使用Java的Graphics2D类,可以轻松地向图像中添加文字水印和图片水印。这些技术为保护数字图像的版权和所有权提供了有效的方法。通过利用本文提供的示例代码,开发者可以轻松地将水印集成到他们的应用程序或项目中。

常见问题解答

  1. 如何调整水印的透明度?

    可以使用setComposite()方法设置透明度,AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha),其中alpha是从0.0到1.0的浮点数。

  2. 如何旋转水印?

    可以使用rotate()方法旋转水印,g2d.rotate(Math.toRadians(angle)),其中angle是角度。

  3. 如何自定义水印字体?

    可以使用setFont()方法自定义水印字体,g2d.setFont(new Font("Font name", Font.STYLE, Font size))

  4. 如何定位水印到特定位置?

    可以使用drawString()drawImage()方法的xy参数将水印定位到特定位置。

  5. 是否可以同时添加多个水印到图像中?

    是的,可以通过多次调用drawString()drawImage()方法来同时添加多个水印。