把路径下的图片添加水印

添加水印

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

我写了一个方法,可以选择路径,把里面的所有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();
        }

    }
}

原来的样子,执行

把路径下的图片添加水印

执行过后

把路径下的图片添加水印

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

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

把遍历目录的方法里

把路径下的图片添加水印

这个位置进行一个修改

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);
        }
    }

再次执行一次

把路径下的图片添加水印

这样就成功了

Original: https://www.cnblogs.com/xhlin/p/16732561.html
Author: 舍橘而取橙也
Title: 把路径下的图片添加水印

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/584986/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • spring-security 配置简介

    1、Spring Security 简介 Spring Security 是一个能够基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在…

    Java 2023年6月6日
    080
  • 2-基本语法

    一、变量 1.按数据类型分类 详细说明: 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节) byte范围:-128 ~ 1…

    Java 2023年6月7日
    072
  • JAVA正则表达式判断元音

    /* 判断字符串”qaq”中间的字符是否是元音* aeiou* AEIOU**/ (1)正则表达式 (2) (3) Original: https://ww…

    Java 2023年6月5日
    089
  • Javaweb08-Ajax项目-分页条件查询 + 增删改

    1、登录 欢迎登录课工场KH96动漫管理系统 用户名: 用户密码: 欢迎登录课工场KH96动漫管理系统 用户名: 用户密码: $(function(){ //使用jQuery的Aj…

    Java 2023年6月15日
    057
  • Spring Boot 整合 Redis

    创建redis缓存配置类,配置插件(较为固定) package com.xsha.servicebase; import com.fasterxml.jackson.annotat…

    Java 2023年6月7日
    057
  • 12.NIO,BIO,AIO总结

    posted @2022-08-22 22:09 努力的达子 阅读(4 ) 评论() 编辑 Original: https://www.cnblogs.com/wmd-l/p/16…

    Java 2023年6月5日
    092
  • springboot通过mybatis-plus操作kingbase8

    1:pom.xml 2:application.properties 3:MybatisPlusConfig.java Original: https://www.cnblogs….

    Java 2023年5月30日
    078
  • 【Java面试手册-算法篇】给定一个整数,输出逆序数字

    输出逆序数字相当于反转数字,比如1234,逆序后为4321,在反转数字时,需要注意反转后得到的数字是否会超过最大范围,比如int最大值为2147483647,正常反转后的值是746…

    Java 2023年6月8日
    085
  • Java SE-简单介绍-基本数据类型

    Java概述 什么是Java? Java 是一种编程语言和计算平台,由 Sun Microsystems 在 1995 年首次发布。它从微末起步,逐渐发展为当今数字世界中很大一部分…

    Java 2023年6月10日
    091
  • Javaweb学习-JSP

    从JSP开始学习创建web项目 posted @2022-03-24 21:21 HelloHui 阅读(9 ) 评论() 编辑 Original: https://www.cnb…

    Java 2023年6月9日
    086
  • SpringMVC(2)-注解开发MVC

    项目目录 一.创建maven项目,添加web支持,在pom.xml问价引入一下代码 <build> <resources> <resource>…

    Java 2023年6月9日
    079
  • Spring Ioc源码分析系列–Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列–Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列&#8211…

    Java 2023年6月8日
    085
  • 记录一下copy我博客的地址(捂脸)

    背景 今天又需要基于Spring扩展点做些事情,来看看自己之前记录的博客,好奇百度页面搜索了下看看能不能搜出我的文章,发现了熟悉的字眼和图片,发现完全就是自己的…. 有…

    Java 2023年6月6日
    0112
  • Spring Boot配置Filter

    此博客是学习Spring Boot过程中记录的,一来为了加深自己的理解,二来也希望这篇博客能帮到有需要的朋友.同时如果有错误,希望各位不吝指教 注意:此方法所在的类一定要添加了@C…

    Java 2023年6月5日
    0106
  • postmassage用法

    1、主页面 allow=”camera ; microphone “作用是开放音频权限 <template> <section class…

    Java 2023年6月8日
    079
  • [springmvc]拦截器功能

    11.拦截器 只会拦截controller的请求,对于静态资源不处理 被spring代理的拦截器实现只需要两步: 1.实现一个拦截器类 package com.spring.con…

    Java 2023年6月6日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球