BufferedImage操作图片笔记
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操作图片笔记相关推荐
- java制作海报工具类,java操作图片贴图,java给图片添加文字,调整字体颜色大小间距
工具类 java操作图片,给一个大图片贴小图片,给图片添加文字并调整文字颜色,大小,字体间距,把本地图片或者网络图片加载到缓冲区 主要方法: imageIoRead方法,把图片加载到缓冲区 merge ...
- JAVA操作图片/合成/电子盖章等
JAVA操作图片/合成/电子盖章等 /**** @param mainFile* @param file1* @param f 透明度 最大为1* @param response* @return* ...
- 动态删除nod linux_Linux文件操作实用笔记
Linux系统遵循一切皆是操作文件的规则.所以想用好Linux系统,就必须要掌握文件相关的操作. 1.创建文件命令:touch 语法格式: touch filename #filename 文件名称. ...
- 手机使用python操作图片文件
手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...
- 多项式相关操作学习笔记
多项式相关操作学习笔记 标签: 多项式 说在前边 记录一下相关的多项式操作,顺便存个模板.(多点求值之后的部分,有点写不动了...留坑留坑 多项式 定义 给定一个环\(R\)(\(R\)通常是交换环, ...
- python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...
这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录).我从网上找了一个比100*100稍微大一点的图片,你可以也找一个.然后我们就可以一起开始今天的学习啦 ...
- imagereader java_java中ImageReader和BufferedImage获取图片尺寸实例
ImageReader 对象通常由特定格式的服务提供者接口 (SPI) 类实例化.服务提供者类(例如 ImageReaderSpi 的实例)向 IIORegistry 注册,后者使用前者进行格式识别和 ...
- vb不能插入png图片_收藏备用!!VBA操作图片【插入导出删除】
作者学习VBA以来搜集的操作图片的代码都在这里了.这就是我说的用到时候修修改改的源代码. ▶▶▶单元格(合并单元格)插入图片 Pictures.insert通用性不如shapes.addpicture ...
- 支付宝花呗提前还款————附操作图片
文章目录 0 背景 1 操作 0 背景 最近使用到花呗分期付款,但是又不想出手续费(未出账的账单,不用出手续费),于是便决定提前还款. 不过不推荐使用花呗,因为提前消费对于大部分年轻人来说都不好(前面 ...
最新文章
- SAP MM Transportation of PR Release Strategy with Classification
- 计算机组成原理重要知识,计算机组成原理重要知识点解析
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
- 小程序生成二维码报错:40169:invalid length for scene, or the data is not json string
- 学web前端开发有前途吗
- hadoop学习2 记录配置hadoop环境的那些坑
- 【渝粤教育】21秋期末考试市场调查与预测10243k2
- discuz 标签详解
- 云在天之南——我的七天七夜(率性苍山洱海)
- c语言基础知识点字母和含义,大学c语言必背基础知识_c语言基础知识大全
- Unity常用工作视图(上)(5大基本视图)
- 2016 Multi-University Training Contest 2 1012 La Vie en rose (暴力)
- 网站模板制作有什么技巧呢?
- 用 Python 实现朋友圈中的九宫格图片 看这一篇就够了
- 中国大学mooc慕课python答案_中国大学MOOC(慕课)Python编程基础答案
- 新能源汽车的电池寿命
- vue配置代理服务器proxy
- 关于sim/usim的一些概念
- 计算机与网络应用word题目解析,计算机二级word真题:《计算机与网络应用》教材的编排...
- cad转dxf格式文件太大,怎样操作将多张CAD图纸文件转换成高版本的DXF格式?