图片缩放应用比较多,我们看看imageFilters提供的ScaleFilter怎么完成这项工作。

首先了解怎么调用过滤器,实例代码如下:

public void imageScale(String fromPath, String toPath, int width, int height)throws IOException {// 定义“缩放过滤器”ScaleFilter scaleFilter = new ScaleFilter(width, height);BufferedImage fromImage = ImageIO.read(new File(fromPath));//BufferedImage toImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 缩放处理scaleFilter.filter(fromImage, toImage);// 写回指定目标文件ImageIO.write(toImage, "jpg", new File(toPath));}

  
效果如下所示:

原图:

处理后:

这里没有做等比例缩放,要想实现这个功能——在图片长宽做相应处理即可!

--------------------------------------

来了解下ScaleFilter内部怎么处理的!

public BufferedImage filter( BufferedImage src, BufferedImage dst ) {if ( dst == null ) {ColorModel dstCM = src.getColorModel();dst = new BufferedImage(dstCM, dstCM.createCompatibleWritableRaster( width, height ), dstCM.isAlphaPremultiplied(), null);}Image scaleImage = src.getScaledInstance( width, height, Image.SCALE_AREA_AVERAGING );Graphics2D g = dst.createGraphics();g.drawImage( scaleImage, 0, 0, width, height, null );g.dispose();return dst;}

  
关键类:

  • BufferedImage
  • Image
  • Graphics2D

-----------------------------------------------

图片黑白处理(去颜色)

public void gray(String fromPath, String toPath) throws IOException {// 定义过滤器GrayscaleFilter filter = new GrayscaleFilter();BufferedImage fromImage = ImageIO.read(new File(fromPath));int width = fromImage.getWidth();int height = fromImage.getHeight();BufferedImage toImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);//for (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {int rgb = fromImage.getRGB(i, j);// 过滤int grayValue = filter.filterRGB(i, j, rgb);toImage.setRGB(i, j, grayValue);}}//ImageIO.write(toImage, "jpg", new File(toPath));}

  
效果:

内部实现原理:

public int filterRGB(int x, int y, int rgb) {int a = rgb & 0xff000000;int r = (rgb >> 16) & 0xff;int g = (rgb >> 8) & 0xff;int b = rgb & 0xff;
//      rgb = (r + g + b) / 3;   // simple averagergb = (r * 77 + g * 151 + b * 28) >> 8;   // NTSC lumareturn a | (rgb << 16) | (rgb << 8) | rgb;}

  
注意点:还有一个过滤器是GrayFilter,注意和这里的GrayscaleFilter予以区别。

java image filters[02]-过滤器初探相关推荐

  1. Intel Realsense D435 Post-processing filters 后处理过滤器(用于消除图像的黑洞)

    官方链接:Post-processing filters 文章目录 后处理过滤器 筛选器说明 抽取滤波器(抽取过滤器)Decimation Filter 空间边缘保留滤镜 Spatial Filter ...

  2. Java培训总结:过滤器链的实现方法、配置和案例分析

    今天小千给大家分享的是Java培训总结:过滤器链的实现方法.配置和案例分析. 过滤器能够对网站中的各种内容进行过滤(页面.Servlet.图片.文件),可以在网站内容请求和响应时进行一些操作,完成一些 ...

  3. Java后端自顶向下方法——过滤器与回调函数

    Java后端自顶向下方法--过滤器与回调函数 (一)回调函数与lambda表达式 在讲过滤器的原理之前,我们先来了解一下什么是回调函数.我们在平时开发中,经常会遇到模块之间的互相调用,调用的方式主要分 ...

  4. Java 集合系列02之 Collection架构

    概要 首先,我们对Collection进行说明.下面先看看Collection的一些框架类的关系图: Java 集合系列02之 Collection架构 Collection是一个接口,它主要的两个分 ...

  5. Java泛型解析(02):通配符限定

    Java泛型解析(02):通配符限定      考虑一个这种场景.计算数组中的最大元素. [code01] public class ArrayUtil {public static <T> ...

  6. 微信公众号Java开发-笔记02【开发接入准备、开发接入】

    学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...

  7. 用java写敏感词过滤器的代码

    用java写敏感词过滤器的代码 这里采用动态代理,所以要创建proxy代理对象,利用代理,来增强某些方法(getParameter方法.getParameterMap方法.getParameterVa ...

  8. Java图片gh颜色渐变_强大的Java图像滤镜特效类库Java Image Filters

    Java Image Filters是一款基于Java的图像处理类库,特别是在图像滤镜特效方面,Java Image Filters简直就是强大到天衣无缝.它几乎提供了PS上大部分的图像特效.比如反色 ...

  9. Java学习记录02

    Java学习记录02 在学习中,博客的书写不可缺少,相应的markdown基本语法也要掌握,下面是自己在CSDN上查找并学习的链接:Markdown语法 2.6项目实训:基于控制台设计简易打折与累加计 ...

最新文章

  1. python函数第二次运行报错_Python学习笔记2-函数、高级特性
  2. 第三代测序技术的方法原理及其在生物领域的应用
  3. hdu4020简单想法题
  4. 微软Windows 8最新幻灯片泄露
  5. activiti工作流引擎入门教程
  6. html5 规定input域,html5中关于input用法
  7. 直接打开php非法请求
  8. Hibernate备忘录
  9. spark共享变量(广播变量Broadcast Variable,累加器Accumulators)
  10. 设计模式学习笔记三:工厂方法模式
  11. MySQL基础3-SQL语言
  12. 七个习惯之三:要事第一
  13. 计算机操作系统32位,电脑操作系统中32位和64位到底有哪些区别
  14. composer.lock(锁文件)到底要不要提交到项目的版本库中?
  15. 蜕变测试(metamorphic testing)经典论文阅读 Compiler Validation via Equivalence Modulo Inputs
  16. mysql 1197_mysql主从不同步报错Last_Errno 1197
  17. dlg.DoModal()介绍
  18. OSChina 周二乱弹 ——爸爸陆陆续续回家了
  19. Ubuntu下U盘没有不能新建粘贴文件 报错 [sdf] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
  20. 软件工程就业前景怎么样?大家对这个职业是否有什么误区?

热门文章

  1. jQuery中常用的函数方法总结
  2. matlab图像处理命令(二)
  3. 【ffmpeg】编译时报错:error: undefined reference to `av...
  4. 【linux】shell中整数运算的加、减、乘、除
  5. java分代技术_JVM调优总结(六):分代垃圾回收详述2
  6. java windows wrapper_Java Service Wrapper 使用(windows)
  7. hibernate 复合主键 根据主键删除_hibernate封装Utils工具类
  8. 小程序画布,随机24个数显示在画布上面,不可重叠
  9. [微信小程序]滚动选择器
  10. iOS Category小举例