zoukankan      html  css  js  c++  java
  • 图片类关于实现图片剪切功能的相关类的学习心得

    最近研究图片类,稍微总结一下,以后继续补充:

        今天上彀学了一下如何实现图片的剪切保存,也知道了相干类的操作,上面就来讲一下如何实现对一张图片实现剪切和重新保存。

        第一步:

        读取图片文件,这里用到的类是FileInputStream类,例如

              FileInputStream  fis  =  new FileInputStream(srcPath);  //srcPath为存放源图片的文件路径

        然后获得源图片的后缀名,因为前面的方法要用到后缀名,这里我们用以下方法可以获得后缀名:

               public String getPostfix(String inputFilePath) {
                return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
            }

        接下来就要用到Iterator泛型接口了:

                    Iterator<ImageReader> it = getImageReadersByFormatName(postFix);
                ImageReader reader = it.next();

        其中getImageReadersByFormatName(String postFix)方法是自定义的方法,就是一个可以根据后缀名返回包含所有当前已注册ImageReaderIterator,这些 ImageReader 宣称可以解码指定格式。

         该方法返回语句:return  ImageIO.getImageReadersByFormatName(postFix);//其中postFix为后缀名,这里有须要详细说一下Iterator接口,这个接口存在的目标是存放一系列的ImageReader类,所以这个接口并非很主要,而是其存放的元素很主要,那么ImageReader类都做了些什么工作呢?让sun公司挖空心思地设计了这个类呢?

        用来解析和解码图像的抽象超类。在 Java Image I/O 框架的上下文中读入图像的类必须创立此类的子类。

        ImageReader 对象通常由特定格式的服务提供者接口 (SPI) 类实例化。服务提供者类(例如 ImageReaderSpi 的实例)向IIORegistry 注册,后者应用前者进行格式识别和表示可用格式 reader 和 writer。

        在设置输入源时(应用 setInput 方法),可以将它标记为“只向前搜索”。此设置意味着包含在输入源中的图像将只按次序读取,可能答应 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部份。

        所以这个类就是为了处理ImageInputStream图片输入流的。但是我们当初并没有创立ImageInputStream,所以接下来的一步是创立图片输入流,其实也就是把文件输入流作为图片输入流的参数,从而失掉了源图片的文件。

        第二步:

        创立图片输入流,也就是上面的语句:

        ImageInputStream  iis= ImageIO.createImageInputStream(fis); //fis是上文的文本输入流

        每日一道理
    如果说友谊是一颗常青树,那么,浇灌它的必定是出自心田的清泉;如果说友谊是一朵开不败的鲜花,那么,照耀它的必定是从心中升起的太阳。 多少笑声都是友谊唤起的,多少眼泪都是友谊揩干的。友谊的港湾温情脉脉,友谊的清风灌满征帆。友谊不是感情的投资,它不需要股息和分红。(友谊可以换其他词语)

        获得了图片输入流之后,就要利用到ImageReader类了,这个类有一个方法是setInput(Object input,boolean seekForwardOnly)是专门用于处理图片输入流的!

       reader.setInput(iis, true);  //reader就是上文中的ImageReader类

        至此已经失掉拥有准确的图片输入流的ImageReader对象了!接下来的工作就绝对简单了,只要可以对ImageReader对象进行准确的解码就能够了!

        ImageReadParam param = reader.getDefaultReadParam();

        上面是对ImageReadParam类的解释。

        

        

        

        

        ImageReadParam

        

        对象用于指定如何在输入时从 Java Image I/O 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件将从其

        

        ImageReader

        

        实现的

        

        getDefaultReadParam

        

        方法中返回

        

        ImageReadParam

        

        的实例。

        

        如果我们要对图片进行剪切,上面是进行剪切的处理:

                     /*
                 * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
                 * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
                 */
                 Rectangle rect = new Rectangle(x, y, width, height);
                 // 提供一个 BufferedImage,将其用作解码像素数据的目标。
                 param.setSourceRegion(rect);

        至此工作已经基本完成了,那么我们如何返回一个修改当时的图像呢?这个实现类似功能的方法还是ImageReader对象提供的。

                    /*
                 * 应用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的
                 * BufferedImage 返回。
                 */
                
    BufferedImage bi = reader.read(0, param);
                 // 保存新图片
                
    ImageIO.write(bi, postFix, new File(subpath + "_" + new Date().getTime() + "." + postFix));

        其中subpath就是存放新文件的路径名。

        最后一步就是关闭图像输入流和文件输入流的工作。

        

    文章结束给大家分享下程序员的一些笑话语录: 腾讯总舵主马化腾,有人曾经戏称如果在Z国选举总统,马化腾一定当选,因为只要QQ来一个弹窗”投马总,送Q币”即可。

    --------------------------------- 原创文章 By
    图片和类
    ---------------------------------

  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3097632.html
Copyright © 2011-2022 走看看