1、添加pom依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
2、代码
import net.coobird.thumbnailator.Thumbnails;
import javax.imageio.ImageIO;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class WatermarkUtil {
private static final List<String> ALLOWED_EXTENSIONS = Arrays.asList("jpg");
public static void main(String[] args) {
list();
}
public static void list() {
String path = "F:\\picture\\";
File file1 = new File(path);
if (file1.exists()) {
File path2 = new File("F:\\picture2\\");
if(!path2.exists()) {
path2.mkdirs();
}
File[] files = file1.listFiles();
for (int i = 0;i<files.length;i++) {
File file2 = files[i];
String watermarkName = file2.getName();
File newWatermarkName = new File(path2.getAbsolutePath()+"/" + watermarkName);
try {
addWatermarkAndCompress(file2, newWatermarkName,"微信:grapro666 QQ: 3642795578");
} catch (IOException e) {
}
}
}
}
private Boolean isAllowed(String fileName) {
if(fileName == null || fileName.lastIndexOf(".") == -1){
return false;
}
String extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
return ALLOWED_EXTENSIONS.contains(extension);
}
private static void addWatermarkAndCompress(File originalFile, File outputFile,String watermarkText) throws IOException {
BufferedImage originalImage = ImageIO.read(originalFile);
BufferedImage watermarkedImage = addWatermark(originalImage, watermarkText);
int originalWidth = originalImage.getWidth();
int originalHeight = originalImage.getHeight();
Thumbnails.of(watermarkedImage)
.size(originalWidth, originalHeight)
.outputQuality(0.4)
.toFile(outputFile);
}
private static BufferedImage addWatermark(BufferedImage image, String watermarkText) {
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
Graphics2D g2d = (Graphics2D) image.getGraphics();
AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.9f);
g2d.setComposite(alphaChannel);
g2d.setColor(Color.GRAY);
Font font = new Font("SimHei", Font.BOLD, 40);
g2d.setFont(font);
FontMetrics fontMetrics = g2d.getFontMetrics();
Rectangle2D rect = fontMetrics.getStringBounds(watermarkText, g2d);
int textWidth = (int) rect.getWidth();
int textHeight = (int) rect.getHeight();
Random random = new Random();
for (int y = 0; y < imageHeight; y += textHeight + 400) {
boolean oddRow = (y / (textHeight + 400)) % 2 == 0;
for (int x = oddRow ? 0 : textWidth / 2; x < imageWidth; x += textWidth + 600) {
int xOffset = random.nextInt(200) - 100;
int yOffset = random.nextInt(100) - 50;
g2d.drawString(watermarkText, x + xOffset, y + yOffset);
}
}
g2d.dispose();
return image;
}
}