貼一段 最近寫的用來(lái) 給 給定目錄下的圖片 添加水印的代碼。
WaterMark.java:
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.io.FilenameFilter;
import java.io.FileOutputStream;
import java.util.Properties;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
public class WaterMark {
??? private List<File> filterFiles(String path, FilenameFilter filter, List<File> fileList) {
??????? if (new File(path).exists() && new File(path).isDirectory()) {
??????????? File[] files = new File(path).listFiles(filter);
??????????? fileList.addAll(Arrays.asList(files));
??????????? File[] allFiles = new File(path).listFiles();
??????????? for (File file : allFiles) {
??????????????? if (file.isDirectory())
??????????????????? filterFiles(file.getPath(), filter, fileList);
??????????? }
??????? }
??????? return fileList;
??? }
??? private void drawWaterMark(File srcPicture, File logoPicture, String destPath, float logoPercent) {
??????? try {
??????????? Image src = ImageIO.read(srcPicture);
??????????? int width = src.getWidth(null);
??????????? int height = src.getHeight(null);
??????????? BufferedImage image = new BufferedImage(width, height,
??????????????????? BufferedImage.TYPE_INT_RGB);
??????????? Graphics g = image.createGraphics();
??????????? g.drawImage(src, 0, 0, width, height, null);
??????????? Image src_logo = ImageIO.read(logoPicture);
??????????? int width_src_logo = src_logo.getWidth(null);
??????????? int heigth_src_logo = src_logo.getHeight(null);
??????????? int width_logo = (int) (width * logoPercent);
??????????? int height_logo = heigth_src_logo * width_logo / width_src_logo;
??????????? g.drawImage(src_logo, (width - width_logo) / 2, (height - height_logo) / 2,
??????????????????? width_logo, height_logo, null);
??????????? g.dispose();
??????????? FileOutputStream out = new FileOutputStream(destPath + "\\" + srcPicture.getName());
??????????? JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
??????????? encoder.encode(image);
??????????? out.close();
??????? } catch (IOException e) {
??????????? e.printStackTrace();
??????? }
??? }
??? public void draw() {
??????? try {
??????????? Properties props = new Properties();
??????????? props.load(WaterMark.class.getClassLoader().getResourceAsStream("system.properties"));
??????????? FFilter filter = new FFilter(props.getProperty("extensions.pictures"));
??????????? List<File> files = new ArrayList<File>();
??????????? String srcPath = props.getProperty("path.pictures.src");
??????????? files = filterFiles(srcPath, filter, files);
??????????? File logoPic = new File(props.getProperty("path.picture.logo"));
??????????? String destPath = props.getProperty("path.pictures.dest");
??????????? float logoSize = Float.valueOf(props.getProperty("percent.picture.logo"));
??????????? for (File pic : files) {
??????????????? String path = pic.getPath().substring(srcPath.length());
??????????????? path = path.substring(0, path.indexOf(pic.getName()));
??????????????? String newPath = destPath + path;
??????????????? if (!new File(newPath).exists())
??????????????????? new File(newPath).mkdirs();
??????????????? drawWaterMark(pic, logoPic, newPath, logoSize);
??????????? }
??????? } catch (Exception e) {
??????????? e.printStackTrace();
??????? }
??? }
??? public static void main(String[] args) {
??????? new WaterMark().draw();
??? }
}
FFilter.java :
import java.io.FilenameFilter;
import java.io.File;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class FFilter implements FilenameFilter {
??? private String regEx = "";
??? public FFilter(String regEx) {
??????? this.regEx = regEx;
??? }
??? public boolean accept(File dir, String filename) {
??????? Pattern p = Pattern.compile(regEx);
??????? Matcher m = p.matcher(filename);
??????? return m.find();
??? }
}
system.properties:
#source pictures directory
path.pictures.src=C:\\Documents and Settings\\Lexy\\Desktop\\testPic
#destination pictures directory
path.pictures.dest=C:\\Documents and Settings\\Lexy\\Desktop\\destTestPicDest
#picture's extensions,space by "|"
extensions.pictures=.jpg
#path of the watermark logo
path.picture.logo=C:\\Documents and Settings\\Lexy\\Desktop\\logo.png
#the watermark percent of the pictures
percent.picture.logo=0.5