把路径下的图片添加水印

这些图片来在极简壁纸,均用于实验

我写了一个方法,可以选择路径,把里面的所有jpg或者png的图片都添加上属于自己的水印

请看代码

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

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/09/26/16:22
 * @Version
 * @Description 让指定目录下的所有.jpg与.png 的文件添加水印
 */
public class Dry {
    public static void main(String[] args) {
        read(new File("D:\\IOTest\\112"));
    }
    public static void read(File file){
        if (file.isDirectory()){// 判断路径是否是目录
            File[] files = file.listFiles();// 遍历目录里面的文件
            for (File ff : files){
                if (ff.isDirectory()) read(ff);// 判断是否为目录然后进行递归
                if (ff.isFile()&&ff.getName().endsWith(".jpg")){// 判断是否文件,后缀名是否jpg
                    shuiyin(ff);// 执行添加水印代码
                }
            }
        }
        // 不是对文件进行修改
        if (file.isFile()&&file.getName().endsWith(".jpg")){
            shuiyin(file);
        }
    }
    public static void shuiyin(File file) {
        try {
            BufferedImage src = ImageIO.read(file); // 实例化图像缓冲流并读取文件
            int height = src.getHeight();// 获取图像高
            int width = src.getWidth();// 获取图像宽
            Graphics2D g = src.createGraphics();// 获得画笔
            // 平滑  让图像更清晰
            g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
            // 设置水印文件
            String txt = "版权所有 @Mxhlin";
            int size  = 45;// 字体大小

            // 实例化本地字体              TRUETYPE_FONT 设置本地文字
            Font f = Font.createFont(Font.TRUETYPE_FONT,new File("D:\\peixun\\java\\Lx\\src\\com\\Mxhlin\\io\\images\\FZSEJW.TTF"));
            // 设置本地字体
            Font font = f.deriveFont(Font.TRUETYPE_FONT,size);
            g.setFont(font);// 设置字体

            // 设置升滑
            FontMetrics fm = g.getFontMetrics();
            int fw = fm.stringWidth(txt);
            int fh = fm.getAscent() - (fm.getHeight()-fm.getAscent());
            g.setColor(new Color(0x8E8EE8));// 设置颜色
            // 设数字左上角
            int sp = 10;
            int x = sp;
            int y = fh+10;
            g.drawString(txt,x,y);

            // 生成图片覆盖原来的图片
            g.dispose();
            String imgs = "D:\\IOTest\\112\\124.jpg";
            ImageIO.write(src,"jpg",file);// 这里和文件路径相等
            //Runtime.getRuntime().exec("cmd /k start "+imgs);
        }catch (Exception e){
            e.fillInStackTrace();
        }

    }
}

原来的样子,执行

image-20220926210403012

执行过后

image-20220926210545502

前三张以.jpg 结尾的图片已经加上水印了,只有最后一个没有加上。

所以我们要稍稍改一些判断方法。

把遍历目录的方法里

image-20220926211730959

这个位置进行一个修改

public static void read(File file) {
        if (file.isDirectory()) {// 判断路径是否是目录
            File[] files = file.listFiles();// 遍历目录里面的文件
            for (File ff : files) {
                if (ff.isDirectory()) read(ff);// 判断是否为目录然后进行递归
                if (ff.isFile() && ff.getName().endsWith(".jpg") || ff.getName().endsWith(".png")) {// 判断是否文件,后缀名是否jpg
                    shuiyin(ff);// 执行添加水印代码
                }
            }
        }
        // 不是对文件进行修改
        if (file.isFile() && file.getName().endsWith(".jpg")|| file.getName().endsWith(".png")) {
            shuiyin(file);
        }
    }

再次执行一次

image-20220926211926524

这样就成功了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值