软件工程日报--java 实现 图片 添加水印

java 实现 图片 添加水印

开发背景

我们需要给工程师上传的图片添加水印这里就使用到了,java 的图形库的知识为图片添加水印

代码示例

我写出一个serive的模块来实现加年月日的水印,来方便队友进行调用

package com.stdu.test;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Date;


public class WatermarkService {

    public static void addTextWatermark(File input, File output) throws Exception {
        BufferedImage sourceImage = ImageIO.read(input);
        Graphics2D g2d = (Graphics2D) sourceImage.getGraphics();

        // 设置水印参数
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f));
        g2d.setColor(Color.BLUE);
        g2d.setFont(new Font("Arial", Font.BOLD, 30));

        String text = new Date().toString();
        FontMetrics fontMetrics = g2d.getFontMetrics();
        int x = sourceImage.getWidth() - fontMetrics.stringWidth(text) - 20;
        int y = sourceImage.getHeight() - fontMetrics.getHeight() + 20;

        // 绘制水印
        g2d.drawString(text, x, y);
        g2d.dispose();

        // 保存图片
        ImageIO.write(sourceImage, "png", output);
    }

    public static void main(String[] args) {
        try {
            File inputFile;
            File outputFile;

            // 处理命令行参数
            if (args.length == 2) {
                inputFile = new File(args[0]);
                outputFile = new File(args[1]);
            } else {
                // 使用默认测试文件路径
                inputFile = new File("C:\\Users\\16029\\Pictures\\input.jpg");
                outputFile = new File("C:\\Users\\16029\\Pictures\\output.png");

                System.out.println("使用默认文件路径:");
                System.out.println("输入文件: " + inputFile.getAbsolutePath());
                System.out.println("输出文件: " + outputFile.getAbsolutePath());
            }

            // 检查输入文件是否存在
            if (!inputFile.exists()) {
                System.err.println("错误:输入文件不存在");
                return;
            }

            // 执行水印添加
            addTextWatermark(inputFile, outputFile);
            System.out.println("水印添加成功!");
            System.out.println("生成文件大小: " + outputFile.length()/1024 + "KB");

        } catch (Exception e) {
            System.err.println("发生错误:");
            e.printStackTrace();
        }
    }
}

效果展示

修改前

修改后

posted @ 2025-04-20 17:48  元始天尊123  阅读(87)  评论(0)    收藏  举报