Home > Java > javaTutorial > Implementation code for Java image processing multiplication effect

Implementation code for Java image processing multiplication effect

黄舟
Release: 2017-09-29 10:14:59
Original
2747 people have browsed it

The multiply effect is an effect we usually see in Photoshop. The following article mainly introduces how to use Java to achieve the effect of multiply. It is shared for your reference and learning. The article gives Detailed sample code is provided for everyone's reference and study. Friends in need can refer to it. Let's take a look at the detailed introduction.

Preface

This article mainly introduces to you how to use Java to achieve the multiply effect, and shares it for your reference and study. Not much to say below, let’s take a look at the detailed introduction.

Multiply is a blending mode in Photoshop. Simply put, it allows the content of two layers to be blended together.


The best demonstration use case in PS

The calculation formula of fusion is actually very simple, which is A*B/255. (A and B refer to layer A and layer B)

A further explanation is:

The red channel in layer A and the red channel in layer B The grayscale value of each pixel corresponding to the red channel is multiplied and divided by 255. Get a new red channel. The same goes for the blue and green channels.

Implementation method

The pixel grayscale value of a certain channel can actually be directly replaced by its corresponding RGB value. Use the code below to Explain this process.

First encapsulate a method to obtain the corresponding RGB array based on pixels, which will be used later


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};
}
Copy after login

Then traverse the image pixels, the traversal process point is omitted, and enter directly In the processing stage


// 先获取两个图层同一位置的像素值
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();
Copy after login

After getting the new pixels, just set them directly into the new picture.

This method has been encapsulated by me and placed in the toolbar Images of Nutz (local download). It can be called directly. Here is a Nutz calling example, which can be modified and used directly. .

For example, let’s add a sun to General Jin:


General Jin

big sun


// 先获取两张图片
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"));
Copy after login

Output result picture:


#Big Sun Golden General, haha, but the choice of this sun is a bit not domineering enough

Of course, this code can actually be written in one line


Images.write(Images.multiply(Images.read(new File("金将军.jpg")), Images.read(new File("大太阳.jpg")), 0, 0), new File("大太阳金将军.jpg"));
Copy after login

Isn’t it very simple^_^

  • Basic picture processing

  • More advanced methods

##Summary

The above is the detailed content of Implementation code for Java image processing multiplication effect. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template