Java图像处理之正片叠底
胖五,原文链接
正片叠底,在Photoshop中是一种混合模式,简单的说就是可以让2个图层的内容融合起来。
融合的计算公式其实非常简单,就是 A*B/255。(A、B是指的图层A和图层B)
再解释一下就是:
A图层中的红色通道和B图层中的红色通道所对应的每一个像素的灰阶值相乘,再被255除。得到一个新的红色通道。 蓝色与绿色通道的操作也是一样的。
某个通道的像素灰阶值其实就可以直接用其对应RGB值来代替,下面用代码来解释下这个过程。
先封装一个根据像素获取对应RGB数组的方法 后面会用到
public static int[] getRGB(int pixel) {int r = (pixel >> 16) & 0xff;int g = (pixel >> 8) & 0xff;int b = pixel & 0xff;return new int[]{r, g, b};
}
然后遍历图像像素,遍历过程点省略了,直接进入处理阶段
// 先获取两个图层同一位置的像素值
int pixelA = imgA.getRGB(x, y);
int pixelB = imgB.getRGB(x, y);// 获取两组RGB数组
int[] rgb1 = getRGB(pixelA);
int[] rgb2 = getRGB(pixelB);// 根据公式分别计算新的RGB值
int r = rgb1[0] * rgb2[0] / 255;
int g = rgb1[1] * rgb2[1] / 255;
int b = rgb1[2] * rgb2[2] / 255; // 获得正片叠底后的像素值
int pixelNew = new Color(r, g, b).getRGB();
拿到新像素后直接设置到新的图片中即可了。
这个方法已经被me封装好了,放到了Nutz的工具栏Images中,可以直接拿来调用,下面给出个Nutz的调用例子,可以拿来修改下直接用。
比如我们给金将军加个太阳:
// 先获取两张图片
BufferedImage imgA = Images.read(new File("金将军.jpg"));
BufferedImage imgB = Images.read(new File("大太阳.jpg"));// 正片叠底
BufferedImage imgMultiply = Images.multiply(imgA, imgB, 0, 0);// 输出到文件
Images.write(imgMultiply, new File("大太阳金将军.jpg"));
输出结果图:
当然了,这段代码其实也可以写成一行
Images.write(Images.multiply(Images.read(new File("金将军.jpg")), Images.read(new File("大太阳.jpg")), 0, 0), new File("大太阳金将军.jpg"));
是不是非常简单^_^
更多关于图像处理接口可以看Nutz的文档, 或许对你会有帮助。
- 图片基本处理
- 更高级的方法
Java图像处理之正片叠底相关推荐
- Java图像处理方面的工具库和开发包
Java图像处理类库Java Image Filters Java Image Filters 是由 Jhlabs 开发的一组用来处理 Java 图像的类库,提供各种常用的图像处理效果,例如反转色.扭 ...
- java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理
java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...
- java毕业设计——基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码)——医学图像处理系统
基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+图像处理技术的医学图像处理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...
- Java图像处理--------RGB调色面板
Java图像处理--------RGB调色面板 一:概述 因为我们知道颜色是由R.G.B.三种颜色所组成的,那么我们只需要更改这三个的数值.我们就可以实现一个简单的调色面板:以下是代码演示: 二:代码 ...
- Java 图像处理教程(人脸检测,添加水印,图像颜色转换)
Java 图像处理教程(人脸检测,添加水印,图像颜色转换) 文章目录 Java 图像处理教程(人脸检测,添加水印,图像颜色转换) 1:图片的读和写 2:彩色图像转换成灰度图像 3:彩色图像转换成负图像 ...
- java imageio处理图像_Linux geoserver调优之Java图像处理优化(原生JAI和ImageIO和java默认库相互转换)...
注:geoserver 版本 Linux geoserver2.15.0 安装 :bin方式安装(内嵌jetty,非war安装) 一.geoserver调优之Java图像处理优化 1.原生JAI ...
- OpenCV3.2 Java图像处理视频学习教程-贾志刚-专题视频课程
OpenCV3.2 Java图像处理视频学习教程-2434人已学习 课程介绍 OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java Ope ...
- JAVA图像处理——高斯模糊
JAVA图像处理--高斯模糊 高斯模糊: 高斯模糊简单的说就是让图像的像素点取周围的像素点的平均,达到令图片模糊的效果. 当然,简单的取平均值是不太好的,因为一般与像素点距离近的像素点他们的颜色更接近 ...
- java 图像处理 空白_使用Java进行图像处理的一些基础操作
图像是由一组像素构成,用二进制形式保存的图片.java语言支持gif.jpeg和bmp这3种主要图像文件格式.java语言的图像处理功能被封装在image类中. 图像载入和输出 在java程序中,图像 ...
最新文章
- Java三维数组的使用
- 2020倩女幽魂服务器正在维修,倩女幽魂手游2020年12月3日维护公告
- X3D.Studio编辑器界面介绍
- svn之check out没有下载so文件原因和解决办法
- ios html 转义字符串,ioS html的转义
- python-面向对象名词解析(类、实例、属性、方法、对象)
- 规划 SOA 参考架构
- linux jetty 配置文件,linux中Jetty的安装和配置方法
- 与计算机运算速度相关参数,计算机CPU运算速度是多少
- 韩顺平 jdbc 之 mysql,(韩顺平讲解)jdbc学习(四)---java连接mysql
- Linux配置本地端口映射
- ba无标度网络python_无标度网络-幂律分布
- 如何用一个例子彻底解释白盒测试中语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、条件组合覆盖?
- 一个c语言程序多个源文件,链接多个C源文件
- 两道2016年美国高中数学竞赛题
- 2010最新网络语言
- Qt 实现画线笔锋效果详细原理
- 【区块链扩容】侧链技术 Plasma(Layer 2)
- 三大运营商URL欺骗;手机免费上网,测试,教程,服务器
- MES系统读取MySQL数据_MES系统数据库