search
HomeJavajavaTutorialHow does Java implement image processing and P-pictures?

准备阶段

原图(来源于网络)

How does Java implement image processing and P-pictures?

PS处理后的模板图

How does Java implement image processing and P-pictures?

待合成图片

How does Java implement image processing and P-pictures?

图片合成

基本步骤

  • 读取模板图和待合成图,调整待合成图的尺寸、旋转角度、亮度、对比度;

  • 创建一个与模板图尺寸一致的空白图像;

  • 创建 Graphics2D 对象,通过 Graphics2D 对象的 drawImage() 方法将待合成图和模板图绘制进空白图像的指定位置(需要注意图层顺序,先绘制待合成图,后绘制模板图);

  • 输出空白图像(合成后的图像)到本地。

代码

图片尺寸调整、旋转使用到了 Thumbnailator, 需添加 Maven 依赖

<dependency>
	<groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
	<version>0.4.8</version>
</dependency>
/**
 * 横坐标
 */
private static final int x = 457;
/**
 * 纵坐标
 */
private static final int y = 295;
/**
 * 旋转角度
 */
private static final double angle = 16;
/**
 * 缩放比例
 */
private static final double scale = 0.18;
/**
 * 图片合成
 *
 * @param imagePath 待合成的图片路径
 * @param outPath 合成后的图片输出路径
 * @throws IOException
 */
private static void synthesis(String imagePath, String outPath) throws IOException {
	// 模板图
	BufferedImage template = ImageIO.read(new File("D:\\local\\images\\template.png"));
	// 待合成图
	BufferedImage image = ImageIO.read(new File(imagePath));
	// 调整待合成图的尺寸和旋转角度
	image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage();
	// 合成后的图
	BufferedImage result = new BufferedImage(template.getWidth(), template.getHeight(), template.getType());
	Graphics2D graphics2D = result.createGraphics();
	// 先画待合成图,后画模板图,这样就能将待合成图放置在模板图的下层
	graphics2D.drawImage(image, x, y, null);
	graphics2D.drawImage(template,0,0, null);
	graphics2D.dispose();
	ImageIO.write(result, "png", new File(outPath));
}

运行代码

public static void main(String[] args) throws IOException {
	synthesis("D:\\local\\images\\weixin_payment_code.png", "D:\\local\\images\\result.png");
}

How does Java implement image processing and P-pictures?

调整图片亮度、对比度

/**
 * 调整亮度、对比度
 *
 * @param image
 */
private static void adjustBrightnessAndContrast(BufferedImage image) {
	int width = image.getWidth();
	int height = image.getHeight();
	for (int x = 0; x < width; x++) {
		for (int y = 0; y < height; y++) {
			Color color = new Color(image.getRGB(x, y));
			int red = calculateColor(color.getRed());
			int green = calculateColor(color.getGreen());
			int blue = calculateColor(color.getBlue());
			color = new Color(red, green, blue);
			image.setRGB(x, y, color.getRGB());
		}
	}
}
/**
 * 亮度,取值范围[-1,1]
 */
private static final double BRIGHTNESS = 0;
/**
 * 对比度,取值范围[-1,1]
 */
private static final double CONTRAST = -0.5;
/**
 * 计算亮度、对比度颜色值
 *
 * @param color 原颜色值
 * @return 返回计算后的颜色值
 */
private static int calculateColor(int color) {
	color = (int)((color - 127.5 * (1 - BRIGHTNESS)) * Math.tan((45 + 44 * CONTRAST) / 180 * Math.PI) + 127.5 * (1 + BRIGHTNESS));
	return getColor(color);
}
/**
 * 获取范围内的颜色值,[0,255]
 *
 * @param color
 * @return
 */
private static int getColor(int color) {
	return color > 255 ? 255 : color < 0 ? 0 : color;
}

在处理待合成图片的尺寸和旋转角度后调用 adjustBrightnessAndContrast() 方法调整亮度和对比度

...
// 调整待合成图的尺寸和旋转角度
image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage();
// 调整待合成图片的亮度、对比度
adjustBrightnessAndContrast(image);
...

重新运行代码

How does Java implement image processing and P-pictures?

The above is the detailed content of How does Java implement image processing and P-pictures?. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:亿速云. If there is any infringement, please contact admin@php.cn delete
How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?Mar 17, 2025 pm 05:46 PM

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.

How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?Mar 17, 2025 pm 05:44 PM

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?Mar 17, 2025 pm 05:43 PM

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

How does Java's classloading mechanism work, including different classloaders and their delegation models?How does Java's classloading mechanism work, including different classloaders and their delegation models?Mar 17, 2025 pm 05:35 PM

Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment