package com.doumee.core.utils; 
 | 
import java.awt.*; 
 | 
import java.awt.image.BufferedImage; 
 | 
  
 | 
import java.io.File; 
 | 
import java.io.IOException; 
 | 
import java.net.HttpURLConnection; 
 | 
import java.net.URL; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Iterator; 
 | 
import java.util.List; 
 | 
  
 | 
import javax.imageio.ImageIO; 
 | 
import javax.imageio.ImageWriter; 
 | 
import javax.imageio.stream.ImageOutputStream; 
 | 
import javax.net.ssl.HttpsURLConnection; 
 | 
  
 | 
public class ImageUtil { 
 | 
    private static List<File> fileList = new ArrayList<>(); 
 | 
  
 | 
    public static void main(String[] args) { 
 | 
        //convertAllImages("F:\\before.png", "F:\\after.png"); 
 | 
        fileList.add(new File("C:\\Users\\T14\\Desktop\\1\\1.jpg")); 
 | 
        convertAllImages(fileList); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 去除文件列表里图片的水印并替换 
 | 
     * 
 | 
     * @Param fileList 文件列表 
 | 
     */ 
 | 
    public static void convertAllImages(List<File> fileList) { 
 | 
        try { 
 | 
            for (File file : fileList) { 
 | 
                if (!file.getName().endsWith("png") && !file.getName().endsWith("jpg")) { 
 | 
                    continue; 
 | 
                } 
 | 
                BufferedImage bi = ImageIO.read(file); //用ImageIO流读取像素块 
 | 
                if (bi != null) { 
 | 
                    removeWatermark(bi); 
 | 
                    String formatName = file.getName().substring(file.getName().lastIndexOf(".") + 1);//生成的图片格式 
 | 
                    ImageIO.write(bi, formatName, file);//用ImageIO流生成的处理图替换原图片 
 | 
                } 
 | 
            } 
 | 
        } catch (IOException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 从源目录获取图片处理后导出到目标目录 
 | 
     * 
 | 
     * @param dir     源目录 
 | 
     * @param saveDir 目标目录 
 | 
     */ 
 | 
    private static void convertAllImages(String dir, String saveDir) { 
 | 
        File dirFile = new File(dir); 
 | 
        File saveDirFile = new File(saveDir); 
 | 
        dir = dirFile.getAbsolutePath(); 
 | 
        saveDir = saveDirFile.getAbsolutePath(); 
 | 
        loadImages(new File(dir)); 
 | 
        for (File file : fileList) { 
 | 
            String filePath = file.getAbsolutePath(); 
 | 
            String dstPath = saveDir + filePath.substring(filePath.indexOf(dir) + dir.length()); 
 | 
            replace(file.getAbsolutePath(), dstPath); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 加载图片 
 | 
     */ 
 | 
    private static void loadImages(File f) { 
 | 
        if (f != null) { 
 | 
            if (f.isDirectory()) { 
 | 
                File[] fileArray = f.listFiles(); 
 | 
                if (fileArray != null) { 
 | 
                    for (File file : fileArray) { 
 | 
                        loadImages(file); //递归调用 
 | 
                    } 
 | 
                } 
 | 
            } else { 
 | 
                String name = f.getName(); 
 | 
                if (name.endsWith("png") || name.endsWith("jpg")) { 
 | 
                    fileList.add(f); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 生成源图片的处理图 
 | 
     * 
 | 
     * @param srcFile 源图片路径 
 | 
     * @param dstFile 目标图片路径 
 | 
     */ 
 | 
    private static void replace(String srcFile, String dstFile) { 
 | 
        try { 
 | 
            URL http; 
 | 
            if (srcFile.trim().startsWith("https")) { 
 | 
                http = new URL(srcFile); 
 | 
                HttpsURLConnection conn = (HttpsURLConnection) http.openConnection(); 
 | 
                conn.setRequestMethod("GET"); 
 | 
            } else if (srcFile.trim().startsWith("http")) { 
 | 
                http = new URL(srcFile); 
 | 
                HttpURLConnection conn = (HttpURLConnection) http.openConnection(); 
 | 
                conn.setRequestMethod("GET"); 
 | 
            } else { 
 | 
                http = new File(srcFile).toURI().toURL(); 
 | 
            } 
 | 
            BufferedImage bi = ImageIO.read(http.openStream()); 
 | 
            if (bi != null) { 
 | 
                removeWatermark(bi); 
 | 
                exportImage(bi, srcFile, dstFile); 
 | 
            } 
 | 
        } catch (IOException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 由ImageIO流生成源图片的处理图 
 | 
     * 
 | 
     * @param bi       ImageIO 
 | 
     * @param fileName 源图片带后缀的文件名 
 | 
     * @param dstFile  目标图片路径 
 | 
     */ 
 | 
    private static void exportImage(BufferedImage bi, String fileName, String dstFile) { 
 | 
        try { 
 | 
            String type = fileName.substring(fileName.lastIndexOf(".") + 1); 
 | 
            Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName(type); 
 | 
            ImageWriter writer = it.next(); 
 | 
            File f = new File(dstFile); 
 | 
            ImageOutputStream ios = ImageIO.createImageOutputStream(f); 
 | 
            writer.setOutput(ios); 
 | 
            writer.write(bi); 
 | 
            bi.flush(); 
 | 
            ios.flush(); 
 | 
            ios.close(); 
 | 
        } catch (IOException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 去除水印 
 | 
     */ 
 | 
    private static void removeWatermark(BufferedImage bi) { 
 | 
        Color wColor = new Color(197, 196, 191); 
 | 
        Color hColor = new Color(140, 88, 100); 
 | 
//        Color wColor = new Color(254, 254, 254); 
 | 
//        Color hColor = new Color(197, 196, 191); 
 | 
        //白底水印 
 | 
        for (int i = 0; i < bi.getWidth(); i++) { 
 | 
            for (int j = 0; j < bi.getHeight(); j++) { 
 | 
                int color = bi.getRGB(i, j); 
 | 
                Color oriColor = new Color(color); 
 | 
                int red = oriColor.getRed(); 
 | 
                int greed = oriColor.getGreen(); 
 | 
                int blue = oriColor.getBlue(); 
 | 
                if (red == 254 && greed == 254 && blue == 254) { 
 | 
                    continue; 
 | 
                } 
 | 
                if (red > 220 && greed > 180 && blue > 80) { 
 | 
                    bi.setRGB(i, j, wColor.getRGB()); 
 | 
                } 
 | 
                if (red <= 240 && greed >= 200 && blue >= 150) { 
 | 
                    bi.setRGB(i, j, wColor.getRGB()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |