添加水印
这些图片来在 极简壁纸 ,均用于实验
我写了一个方法,可以选择路径,把里面的所有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/
转载文章受原作者版权保护。转载请注明原作者出处!