zoukankan      html  css  js  c++  java
  • java 切图 判断图片是否是纯色/彩色图片

    首先上切图的代码

    /**
         * 图片剪裁
         * @param x 距离左上角的x轴距离
         * @param y 距离左上角的y轴距离
         * @param width 宽度
         * @param height 高度
         * @param sourcePath 图片源
         * @param descpath 目标位置
         */
        public static void imageCut(int x, int y, int width, int height, String sourcePath, String descpath) {  
            FileInputStream is = null;  
            ImageInputStream iis = null;  
            try {  
                is = new FileInputStream(sourcePath);  
                String fileSuffix = sourcePath.substring(sourcePath.lastIndexOf(".") + 1);  
                Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(fileSuffix);  
                ImageReader reader = it.next();  
                iis = ImageIO.createImageInputStream(is);  
                reader.setInput(iis, true);  
                ImageReadParam param = reader.getDefaultReadParam();  
                Rectangle rect = new Rectangle(x, y, width, height);  
                param.setSourceRegion(rect);  
                BufferedImage bi = reader.read(0, param);  
                ImageIO.write(bi, fileSuffix, new File(descpath));  
            } catch (Exception ex) {  
                ex.printStackTrace();  
            } finally {  
                if (is != null) {  
                    try {  
                        is.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                    is = null;  
                }  
                if (iis != null) {  
                    try {  
                        iis.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                    iis = null;  
                }  
            }  
        }

    以上为切图代码,注意:如果不关闭流的话可能会影响其他代码对图片的操作,尤其是删除等操作

    再来一个自己写的判断是否是纯色图片的代码,稍微改一下可以用来判断是不是彩色图片

    /**
         * 判断是否为纯色
         * @param imgPath 图片源
         * @param percent 纯色百分比,即大于此百分比为同一种颜色则判定为纯色,范围[0-1]
         * @return
         * @throws IOException
         */
        public static boolean isSimpleColorImg(String imgPath,float percent) throws IOException{
            BufferedImage src=ImageIO.read(new File(imgPath));
            int height=src.getHeight();
            int width=src.getWidth();
            int count=0,pixTemp=0,pixel=0;
            for(int i=0;i<width;i++){
                for(int j=0;j<height;j++){
                    pixel=src.getRGB(i, j);
                    if(pixel==pixTemp) //如果上一个像素点和这个像素点颜色一样的话,就判定为同一种颜色
                        count++;
                    else
                        count=0;
                    if((float)count/(height*width)>=percent) //如果连续相同的像素点大于设定的百分比的话,就判定为是纯色的图片 
                        return true;
                    pixTemp=pixel;
                }
            }
            return false;
        }

    以上为本人用来判断纯色的代码,逻辑比较简单,具体还要看需求来决定

    如果是判断彩色的话,可以试试如下逻辑:

    1、如果有N个像素点各不相同的话可以判定为彩色

    2、如果图片上有>=N种像素点的话,判断为彩色图片

    以上只是本人的拙见,如果有更好的想法,欢迎分享交流

    Ink.Flower@china
  • 相关阅读:
    单个 js 文件禁用 ESLint 语法校验
    meta标签整合
    安装es6编译babel
    JSON.parse()和JSON.stringify()的区别
    preventDefault()、stopPropagation()、return false 的区别
    excel 表格内容读取
    redis 小例
    多文件打包下载
    随笔
    js数组删除元素
  • 原文地址:https://www.cnblogs.com/inkflower/p/6642089.html
Copyright © 2011-2022 走看看