BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。

BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));

使图片变灰

使图片变灰有两种方法,一种是使用现成的类,一种是自己对每个像素进行操纵。

使用现成的类ColorConvertOp,它的作用就是将一个颜色模式的图片转换为另一个颜色模式的图片。颜色模式是诸如RGB颜色模式、灰度颜色模式等决定图片色彩的东西,比如一副RGB颜色模式的图片是彩色,但我们把它复制到一个灰度颜色模式的图片上时,图片就成灰色的了。

public BufferedImage getGrayPicture(BufferedImage originalImage) { BufferedImage grayPicture; int imageWidth = originalImage.getWidth(); int imageHeight = originalImage.getHeight(); grayPicture = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_3BYTE_BGR); ColorConvertOp cco = new ColorConvertOp(ColorSpace .getInstance(ColorSpace.CS_GRAY), null); cco.filter(originalImage, grayPicture); return grayPicture; }

自己操纵图片的像素实现图片变灰。图片变灰的通用算法:取出某个像素的r、g、b值,然后重新计算r、g、b值,计算公式为r=r*0.3+g*0.59+b*0.11,g=r,b=g,最后将该rgb值重新写回像素。

可以用下面三个函数

分别取出r、g、b。ColorModel是一个用来将图片某点的rgb值转化为r、g、b以及alpha等值的类。而bufferedImage本身只能取出一个完整的rgb值,无法分离单独的r、g、b等值。

bufferedImage.getColorModel().getRed(int pixel)

bufferedImage.getColorModel().getGreen(int pixel)

bufferedImage.getColorModel().getBlue(int pixel)

但是这里要注意的是使用这种方法取出r、g、b时,有可能弹出一个错误信息——IllegalArgumentException: More than one component per pixel。通常当你使用这个方法操纵jpg等格式的图片时会报这个错误。这是因为某些图片如JPG格式的不支持使用单个int值的像素读取rgb等信息,应该使用Object类型的像素值进行读取,也就是bufferedImage.getColorModel().getGreen(Object indata)

public BufferedImage getGrayPicture(BufferedImage originalImage) { int green=0,red=0,blue=0,rgb; int imageWidth = originalImage.getWidth(); int imageHeight = originalImage.getHeight(); for(int i = originalImage.getMinX();i < imageWidth ;i++) { for(int j = originalImage.getMinY();j < imageHeight ;j++) { //图片的像素点其实是个矩阵,这里利用两个for循环来对每个像素进行操作 Object data = routeImage.getRaster().getDataElements(i, j, null);//获取该点像素,并以object类型表示 red = routeImage.getColorModel().getRed(data); blue = routeImage.getColorModel().getBlue(data); green = routeImage.getColorModel().getGreen(data); red = (red*3 + green*6 + blue*1)/10; green = red; blue = green; /* 这里将r、g、b再转化为rgb值,因为bufferedImage没有提供设置单个颜色的方法,只能设置rgb。rgb最大为8388608,当大于这个值时,应减去255*255*255即16777216 */ rgb = (red*256 + green)*256+blue; if(rgb>8388608) { rgb = rgb - 16777216; } //将rgb值写回图片 routeImage.setRGB(i, j, rgb); } } return originalImage; }

BufferedImage操作图片笔记相关推荐

  1. java制作海报工具类,java操作图片贴图,java给图片添加文字,调整字体颜色大小间距

    工具类 java操作图片,给一个大图片贴小图片,给图片添加文字并调整文字颜色,大小,字体间距,把本地图片或者网络图片加载到缓冲区 主要方法: imageIoRead方法,把图片加载到缓冲区 merge ...

  2. JAVA操作图片/合成/电子盖章等

    JAVA操作图片/合成/电子盖章等 /**** @param mainFile* @param file1* @param f 透明度 最大为1* @param response* @return* ...

  3. 动态删除nod linux_Linux文件操作实用笔记

    Linux系统遵循一切皆是操作文件的规则.所以想用好Linux系统,就必须要掌握文件相关的操作. 1.创建文件命令:touch 语法格式: touch filename #filename 文件名称. ...

  4. 手机使用python操作图片文件

    手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...

  5. 多项式相关操作学习笔记

    多项式相关操作学习笔记 标签: 多项式 说在前边 记录一下相关的多项式操作,顺便存个模板.(多点求值之后的部分,有点写不动了...留坑留坑 多项式 定义 给定一个环\(R\)(\(R\)通常是交换环, ...

  6. python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...

    这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录).我从网上找了一个比100*100稍微大一点的图片,你可以也找一个.然后我们就可以一起开始今天的学习啦 ...

  7. imagereader java_java中ImageReader和BufferedImage获取图片尺寸实例

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

  8. vb不能插入png图片_收藏备用!!VBA操作图片【插入导出删除】

    作者学习VBA以来搜集的操作图片的代码都在这里了.这就是我说的用到时候修修改改的源代码. ▶▶▶单元格(合并单元格)插入图片 Pictures.insert通用性不如shapes.addpicture ...

  9. 支付宝花呗提前还款————附操作图片

    文章目录 0 背景 1 操作 0 背景 最近使用到花呗分期付款,但是又不想出手续费(未出账的账单,不用出手续费),于是便决定提前还款. 不过不推荐使用花呗,因为提前消费对于大部分年轻人来说都不好(前面 ...

最新文章

  1. SAP MM Transportation of PR Release Strategy with Classification
  2. 计算机组成原理重要知识,计算机组成原理重要知识点解析
  3. hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
  4. 小程序生成二维码报错:40169:invalid length for scene, or the data is not json string
  5. 学web前端开发有前途吗
  6. hadoop学习2 记录配置hadoop环境的那些坑
  7. 【渝粤教育】21秋期末考试市场调查与预测10243k2
  8. discuz 标签详解
  9. 云在天之南——我的七天七夜(率性苍山洱海)
  10. c语言基础知识点字母和含义,大学c语言必背基础知识_c语言基础知识大全
  11. Unity常用工作视图(上)(5大基本视图)
  12. 2016 Multi-University Training Contest 2 1012 La Vie en rose (暴力)
  13. 网站模板制作有什么技巧呢?
  14. 用 Python 实现朋友圈中的九宫格图片 看这一篇就够了
  15. 中国大学mooc慕课python答案_中国大学MOOC(慕课)Python编程基础答案
  16. 新能源汽车的电池寿命
  17. vue配置代理服务器proxy
  18. 关于sim/usim的一些概念
  19. 计算机与网络应用word题目解析,计算机二级word真题:《计算机与网络应用》教材的编排...
  20. cad转dxf格式文件太大,怎样操作将多张CAD图纸文件转换成高版本的DXF格式?

热门文章

  1. Zenlayer完成近亿元A轮融资,欲构建全球连接服务平台
  2. 能源项目xml文件标签释义--DefaultAdvisorAutoProxyCreator
  3. memcmp与strcmp区别
  4. RAID入门一页通,最全的RAID技术、原理图解
  5. thinkphp ajax 实例 实现
  6. 实现远程访问局域网内的多台电脑
  7. cacti批量添加脚本
  8. (转)一个用D3D绘制2D图形的例子
  9. 开始Azure之旅,参加深度培训 (转)
  10. Google金山词霸体验小记