解剖App 获取里面所有的提图片,按照分辨率分类

JAVA 处理图片(检索,分类)

2017/12/18 14:40:41


解剖 APP 获取里面所有的图片,分类

京东里面png图片 头3千多张

根据分辨率分类

递归遍历目录

  • 代码




        import java.io.File;
        import java.util.ArrayList;
        import java.util.List;

        public class MaoShenFileUtil {

            // 存放文件路径的集合
            private static List<String> filelist = new ArrayList<>();

            /**
             * 遍历目录的所有文件
             * 参数: 文件的路径
             * @param filepath
             * @return
             */
            public static List<String> traverse(String filepath) {

                // 创建文件对象
                File file = new File(filepath);

                //判断文件是否存在
                if (file.exists()) {

                    // 获取文件数组
                    File[] files = file.listFiles();

                    //遍历数组中的所有文件
                    for (File f : files) {

                        //判断文件是否隐藏
                        if (f.isHidden()) {
                            // 重新开始遍历
                            continue;

                        }

                        //如果是文件夹,递归调用自己
                        if (f.isDirectory()) {
                            // 传入路径
                            traverse(f.getPath());
                        }
                        // 添加如集合
                        filelist.add(f.getPath());
                    }
                }
                return filelist;
            }
        }

获取图片的分辨率

  • 代码


        import javax.imageio.ImageIO;
        import java.awt.image.BufferedImage;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileNotFoundException;
        import java.io.IOException;
        import java.nio.channels.FileChannel;

        public class MaoShenImageUtil {


            public static int[] Resolution(String filepath) {

                // 文件对象
                File file = new File(filepath);

                FileChannel fc = null;

                if (file.exists() && file.isFile()) {

                    try {

                        FileInputStream fs = new FileInputStream(file);

                        fc = fs.getChannel();


                    } catch (FileNotFoundException e) {

                        e.printStackTrace();

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                }

                BufferedImage bi = null;

                try {

                    bi = ImageIO.read(file);

                } catch (IOException e) {

                    e.printStackTrace();

                }

                // 读取图片的宽度 (分辨率)
                int width = bi.getWidth();
                // 读取图片的高度 (分辨率)
                int height = bi.getHeight();

                // 返回数组 (宽度 高度)
                return new int[]{width, height};
            }

        }

创建对应的文件夹

  • 代码


        import java.io.File;
        import java.util.ArrayList;
        import java.util.List;

        public class MaoShenTest1 {


            public static void main(String[] args) {

                //  所有图片的路径
                List<String> list = MaoShenFileUtil.traverse("D:\\BaiduNetdiskDownload\\JD\\img\\png");

                // 输出有多少张图片
                System.out.println(list.size());

                // 图片文件分辨率的集合
                List<String> allsize = new ArrayList<>();

                // 遍历集合
                for (String str : list) {

                    // 获取分辨率
                    int[] resolution = MaoShenImageUtil.Resolution(str);

                    // 拼接字符串
                    String size = resolution[0] + "-" + resolution[1];

                    //判断集合里面是否有当前大小的类型
                    if (!allsize.contains(size)) {
                        //没有添加
                        allsize.add(size);

                    }

                }

                // 循环创建对应的文件夹
                for (String size : allsize) {

                    // 文件对象
                    File file = new File("D:\\BaiduNetdiskDownload\\JD\\ms\\png\\" + size);

                    // 创建文件夹
                    file.mkdirs();
                }

            }

        }

拷贝图片

  • 代码(判断像素)
        import javax.imageio.ImageIO;
        import java.awt.image.BufferedImage;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileNotFoundException;
        import java.io.IOException;
        import java.nio.channels.FileChannel;

        public class MyImageUtil {


            public static boolean isResolution(String filepath, int width, int height) {

                File file = new File(filepath);
                FileChannel fc = null;
                if (file.exists() && file.isFile()) {
                    try {
                        FileInputStream fs = new FileInputStream(file);
                        fc = fs.getChannel();
                        //System.out.println(fc.size() + "-----fc.size()");
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                //System.out.println(file.length() + "-----file.length  B");
                // System.out.println(file.length() * 1024 + "-----file.length  kb");
                BufferedImage bi = null;
                try {
                    bi = ImageIO.read(file);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                int w = bi.getWidth();
                int h = bi.getHeight();

                //System.out.println("宽:像素-----" + width + "高:像素"  + height);

                if (w == width && h == height) {
                    return true;
                }
                return false;

            }
        }
  • 代码 (拷贝)
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileOutputStream;
        import java.util.List;

        public class MaoShenTest2 {


            public static void main(String[] args) {

                // 所有文件的路径
                List<String> list = MaoShenFileUtil.traverse("D:\\BaiduNetdiskDownload\\JD\\img\\png");

                //遍历
                for (String str : list) {
                    // 获取分辨率
                    int[] resolution = MaoShenImageUtil.Resolution(str);

                    //拼接字符串
                    String s = resolution[0] + "-" + resolution[1];

                    //判断像素是否相等
                    boolean resolution1 = MyImageUtil.isResolution(str, resolution[0], resolution[1]);

                    //判断
                    if (resolution1) {


                        try {
                            // 文件
                            File file = new File(str);

                            //文件读取流
                            FileInputStream fis = new FileInputStream(file);

                            //文件输出流
                            FileOutputStream fos = new FileOutputStream(new File("D:\\BaiduNetdiskDownload\\JD\\ms\\png\\" + s + "\\" + file.getName()));


                            int len = 0;

                            byte[] buf = new byte[1024 * 8];

                            while ((len = fis.read(buf)) != -1) {

                                //写入
                                fos.write(buf, 0, len);

                            }


                            // 关闭
                            fos.close();
                            fis.close();


                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
                }

            }
        }

效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值