Java图像处理教程之正片叠底效果的实现
前言
本文主要给大家介绍了关于利用Java如何实现正片叠底效果的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
正片叠底,在Photoshop中是一种混合模式,简单的说就是可以让2个图层的内容融合起来。
PS中最佳展示用例
融合的计算公式其实非常简单,就是 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应用程序中创建图像
合成图像 您不必从文件中读取所有的图像 - 您可以创建自己的图像.要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,它把图像数据存储在一个可以被访问的缓冲区中.它还支持各种存储像素数据的方法:使用或不使用 alpha 通道.不同种类的颜色模型以及颜色组件的各种精确度.ColorModel 类提供一种灵活的方法定义各种颜色模型,以和 BufferedImage 对象一起使用.为了理解颜色模型工作的基本知识,我们将只使用一个缺省的颜色模型,其颜
-
详解Java如何实现图像灰度化
24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图像存储为32位图像,每个像素多余的字节存储为一个alpha值,表现有特殊影响的信息[1]. 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值.亮度值),灰度范围为0-255[2].这样就得到一幅图片的灰度图. 几种灰度化的方法 1.分量法:使用RGB三个分量中
-
Java图像之自定义角度旋转(实例)
图像的旋转需要调用 Graphics2D 类的rotate()方法,该方法将根据指定的弧度旋转图像. 语法如下: rotate(double theta) 其中, theta 是指旋转的弧度. 说明:该方法只接受旋转的弧度作为参数,可以使用 Math 类的 toRadians()方法将角度转换为弧度. toRadians()方法接受角度值作为参数,返回值是转换完毕的弧度值. 实例代码: /** *//** * 旋转图片为指定角度 * * @param bufferedimage * 目标图像 *
-
举例解析Java的图像缓冲技术的使用
当图像信息量较大,采用以上直接显示的方法,可能前面一部分显示后,显示后面一部分时,由于后面一部分还未从文件读出,使显示呈斑驳现象.为了提高显示效果,许多应用程序都采用图像缓冲技术,即先把图像完整装入内存,在缓冲区中绘制图像或图形,然后将缓冲区中绘制好的图像或图形一次性输出在屏幕上.缓冲技术不仅可以解决闪烁问题,并且由于在计算机内存中创建图像,程序可以对图像进行像素级处理,完成复杂的图像变换后再显示. [例]小应用程序程序演示图像缓冲显示技术.程序运行时,当鼠标在图像区域内按下时,图像会出现边框,
-
Java图像处理工具类
本工具类的功能:缩放图像.切割图像.图像类型转换.彩色转黑白.文字水印.图片水印等 复制代码 代码如下: package net.kitbox.util; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Re
-
java数字图像处理基础使用imageio写图像文件示例
一个BufferedImage的像素数据储存在Raster中,ColorModel里面储存颜色空间,类型等信息,当前Java只支持一下三种图像格式- JPG,PNG,GIF,如何向让Java支持其它格式,首先要 完成Java中的图像读写接口,然后打成jar,加上启动参数- Xbootclasspath/pnewimageformatIO.jar即可. Java中如何读写一个图像文件,使用ImageIO对象即可.读图像文件的代码如下: 复制代码 代码如下: File file = new File
-
Java实现的图像查看器完整实例
本文实例讲述了Java实现的图像查看器.分享给大家供大家参考.具体如下: 1. MyCanvas.java: package PictureViewer; import java.awt.*; import java.awt.event.*; import java.awt.image.*; public class MyCanvas extends Canvas implements ComponentListener{ private BufferedImage bi; private Im
-
使用Java进行图像处理的一些基础操作
图像是由一组像素构成,用二进制形式保存的图片.java语言支持GIF.JPEG和BMP这3种主要图像文件格式.java语言的图像处理功能被封装在Image类中. 图像载入和输出 在java程序中,图像也是对象,所以载入图像时,先要声明Image对象,然后,利用getImage()方法把Image对象与图像文件联系起来.载入图像文件的方法有两个: Image getImage(URL url),url指明图像所在位置和文件名. Image getImage(URL url,String name)
-
简述Java图像倾斜方法及实例 原创
可以使用 graphics2D 类提供的 shear() 方法设置绘图的倾斜方向,从而使图像实现倾斜的效果.下面,我们一起来看一下它的使用方法和实例. 语法如下: shear(double shx,double shy) shx:水平方向的倾斜量: shy:垂直方向的倾斜量. 实例:在窗体上绘制图像,使图像在水平方向实现倾斜效果.下面是具体代码: public class TiltImage extends JFrame{ private Image img; private MyCanv
-
Java图像处理教程之正片叠底效果的实现
前言 本文主要给大家介绍了关于利用Java如何实现正片叠底效果的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 正片叠底,在Photoshop中是一种混合模式,简单的说就是可以让2个图层的内容融合起来. PS中最佳展示用例 融合的计算公式其实非常简单,就是 A*B/255.(A.B是指的图层A和图层B) 再解释一下就是: A图层中的红色通道和B图层中的红色通道所对应的每一个像素的灰阶值相乘,再被255除.得到一个新的红色通道. 蓝色与绿色通道的操作也是一样的. 实现方法
-
Java学习教程之定时任务全家桶
定时任务应用非常广泛,Java提供的现有解决方案有很多. 本次主要讲schedule.quartz.xxl-job.shedlock等相关的代码实践. 一.SpringBoot使用Schedule 核心代码: @Component public class ScheduleTask { private Logger logger = LoggerFactory.getLogger(ScheduleTask.class); @Scheduled(cron = "0/1 * * * * ? &quo
-
精辟全面且细致的java运算符教程详解
目录 前言 一.算术运算符 1.1 int/int结果还是int 1.2 0不能作为除数 1.3 关于% 1.4 增量赋值运算符+= -= *= /= 1.5 自增或自减运算 二.关系运算符 三.逻辑运算符 3.1 逻辑与&& 3.2 逻辑或|| 3.3 逻辑非! 四.位运算符 4.1 按位与& 4.2 按位或| 4.3 按位异或^ 4.4 按位取反~ 五.移位运算 5.1 左移<< 5.2 右移>> 5.3 无符号右移>>> 六.条件运算
-
Java图像处理之获取用户感兴趣的区域
目录 需求背景 概念解释 ROI openCV 掩膜mask 代码实现 效果如下 工具类 需求背景 获取ROI图片:现在有一张图片,用户能够在坐标上选择一些点组成一个区域,这个区域称为用户感兴趣的区域,需要利用mask掩膜生成,需要生成mask图片.ROI图片,要求使用OpenCV+Java实现. 概念解释 ROI ROI: region of interest 感兴趣的区域 openCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视
-
Java基础教程_判断语句if else
与三元运算符相比: 好处:可以简化if else 代码 弊端 因为是一个运算符,所以运算玩必须要有一个结果 以上这篇Java基础教程_判断语句if else就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
vue+ java 实现多级菜单递归效果
效果如图: 大概思路:树形视图使用的是vue官方事例代码,java负责封装数据,按照vue官方事例的数据结构封装数据即可.有两个需要关注的点: 1.官方事例的数据结构是一个对象里面包含着集合,而不是一个集合对象 2.递归算法 上代码: 前端:html+js <html> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.
-
Java核心教程之常见时间日期的处理方法
Java日期处理类Date详解 时间的基础知识 时区:整个地球分为二十四时区,每个时区都有自己的本地时间. 为了统一起见,使用一个统一的时间,称为全球标准时间(UTC,Universal Time Coordinated). TC与格林尼治平均时(GMT,Greenwich Mean Time,也翻译成:格林威治标准时间)差不多一样 CST(北京时间),北京时间,China standard Time,中国标准时间.在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8. 时间戳:自197
-
eclipse汉化及jdk安装环境配置超详细教程(Java安装教程)
很开心能写下这篇文章帮助对java语言有兴趣的人 关于java软件分为idea以及ec 这里我们使用ec 我安装时也遇见了很多问题,诸如安装路径,环境配置 网上许多文章众说纷纭, 踩过许多坑,所以才有意写下此文,帮助那些对于Java.有兴趣的同学们,话不多说,一起来看吧 1.下载安装ec 这是java构成的一部分 这里我直接提供下载 进入直接下载即可 https://www.eclipse.org/downloads/ 点击下载 进入这个页面 点击镜像加速器下载 加粗样式 选择图中有china文
-
Java 给PPT添加动画效果的示例
PPT幻灯片中对形状可设置动画效果,常见的动画效果为内置的固定类型,即动画效果和路径是预先设定好的固定模板,但在设计动画效果时,用户也可以按照自己的喜好自定义动画动作路径.下面,通过Java后端程序代码来展示如何给PPT添加动画效果.包括预设动画以及自定动画效果的方法. 本次测试环境包括: 目标测试文档:Power Point 2013 编译环境:IntelliJ IDEA 2018 JDK版本:1.8.0 PPT库版本:spire.presentation.jar 4.3.2 注:在通过该PP
-
Java基础教程之数组的定义与使用
目录 一.数组的基本概念 二.数组的声明 三.数组的创建及初始化 1.数组的创建 2.数组的初始化 四.访问数组元素 五.for each 循环 六.数组的拷贝 七.数组排序 八.二维数组 总结 一.数组的基本概念 数组是一种数据类型,用来存储同一类型值的集合,它在内存中是一段连续的空间.通过一个整形下标(index,或者称之为索引)可以访问数组中的每一个值.例如,如果a是一个整型数组,a[i]就是一个下标为i的一个整数,数组是一种引用类型. 二.数组的声明 声明数组变量时,需要指出数组类型(数
随机推荐
- iOS开发中WebView的基本使用方法简介
- 用js来格式化字符串示例模仿css
- JavaScript原生数组Array常用方法
- BIOS设置图解教程 Award Bios最新(转)
- Nginx泛解析到子目录后自动判断有无public目录详解
- JavaScript中的prototype.bind()方法介绍
- 别人整理的服务器变量:$_SERVER
- 在ASP处理程序时显示进度
- jQuery中需要注意的细节问题小结
- 浅析SQL Server中的执行计划缓存(下)
- 基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
- jQuery 快速结束当前正在执行的动画
- jquery判断iPhone、Android设备类型
- javascript+xml实现简单图片轮换(只支持IE)
- JavaScript去除数组里重复值的方法
- 使用了星外的Ipsec如何允许SQL 2000远程连接?
- Android开发中ImageLoder进行图片加载和缓存
- Android中通过样式来去除app的头及界面全屏(备忘)的实现方法
- 反向访问列表在实际中的应用
- php在windows环境下获得cpu内存实时使用率(推荐)