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

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

第一步:

读取图片文件,这里用到的类是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
图片和类
---------------------------------

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/24/3097632.html

图片类关于实现图片剪切功能的相关类的学习心得相关推荐

  1. 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  2. 日期的包装 java,Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类...

    Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯. 2.面向对象的出现,将复杂的事情简单化. 3.面向对象的出现,将之前过 ...

  3. wxWidgets:wxConfig 和相关类的演示

    wxWidgets:wxConfig 和相关类的演示 wxWidgets:wxConfig 和相关类的演示 wxWidgets:wxConfig 和相关类的演示 #include "wx/w ...

  4. java派生类属例子_辨析之派生类属和相关类属

    更多真题资料及报考疑问请加老师微信66746005,或点击这里在线咨询 1.派生类属:新知是原有知识的特例.例证.派生物,充实.证实了原有概念.例如:学生一开始认为水果是一种多汁.味甜.可食用的食物后 ...

  5. 《Android 应用案例开发大全(第3版)》——第2.6节绘制相关类

    本节书摘来自异步社区<Android 应用案例开发大全(第3版)>一书中的第2章,第2.6节绘制相关类,作者 吴亚峰 , 苏亚光 , 于复兴,更多章节内容可以访问云栖社区"异步社 ...

  6. 《Android 应用案例开发大全(第3版)》——第2章,第2.6节绘制相关类

    本节书摘来自异步社区<Android 应用案例开发大全(第3版)>一书中的第2章,第2.6节绘制相关类,作者 吴亚峰 , 苏亚光 , 于复兴,更多章节内容可以访问云栖社区"异步社 ...

  7. 淘淘商城第三天—完成商品添加功能 商品类目选择 图片上传 图片服务器搭建 kindEditor富文本编辑器的使用 商品添加功能

    1.实现商品类目选择功能 1.1需求 在商品添加页面,点击"选择类目"显示商品类目列表: 请求初始化树形控件的url:/item/cat/list 1.2 EasyUI tree数 ...

  8. vue-preview动态获取图片宽高并增加旋转功能

    vue-preview是一个常用的图片查看器,微博网页版就是用的这个插件: 我在项目中也用过这个插件,总体来说,还是比较满意.但是缺少一个图片旋转功能. 安装使用 第一步:安装 npm i vue-p ...

  9. Java之~ 上传 图片压缩,阿里图片压缩,图片旋转方法工具类

    需要的jar jai_codec-1.1.3.jar,jai_core-1.1.3.jar,simpleimage-1.2.0.jar,metadata-extractor-2.3.1.jar(旋转时 ...

最新文章

  1. Spring+Dubbo+Zookeeper简单框架与使用
  2. 前段框架——VueX
  3. 使用Docker构建Jekyll站点
  4. python常见模块命令(os/sys/platform)
  5. dao层mysql复合语句_在业务中是使用多个Dao组合好,还是一个链接查询好?
  6. js延迟加载优化页面响应速度
  7. GeoServer之安装mbtiles插件
  8. 卡拉OK歌词同步播放
  9. python把文件中的邮箱分类 保存到相应的文件里面
  10. boost升压电路遇到过的问题
  11. 【国家统计局】统计用区划和城乡划分代码2019
  12. Http分段下载实现
  13. ubuntu16.04下安装teamview12版本
  14. 单击选定单元格后输入新内容_excel表格,要双击选定后才能输入,单击不能输入为什么...
  15. 主视图和左视图算体积最大最小值
  16. php项目部署在腾讯云服务器,腾讯云服务器部署
  17. 机器学习必须需要大量数据?小数据集也能有大价值!
  18. 新飞飞不显示服务器,《新飞飞》官方网站-新资料片《异域远征军》-网易Q萌战斗网游...
  19. 蓝桥杯 试题 基础练习 Sine之舞 c语言
  20. 【Python学习】Word文档重复字检测程序

热门文章

  1. webservice无法理解soap头action_数学是对理解的追求,而不仅仅是追求计算
  2. 添加lua_非关系型数据库Redis之Lua脚本
  3. 【Spring】配置SpringBoot同时支持http和https访问
  4. 【Mac】Mac iTerm2 使用笔记 远程连接
  5. 81-spark异常总结1
  6. 【Docker】Docker 安装node-exporter prometheus pushgateway 页面显示Down
  7. Sping : @InitBinder注解
  8. Spring源码:ApplicationContextInitializer
  9. Kafka : kafka无法消费的情况
  10. DNS 反向解析出错 Error in named configuration: zone centos.vbird/IN: loaded serial 2011080401