准备阶段
原图(来源于网络)
PS处理后的模板图
待合成图片
图片合成
基本步骤
读取模板图和待合成图,调整待合成图的尺寸、旋转角度、亮度、对比度;
创建一个与模板图尺寸一致的空白图像;
创建
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"); }
调整图片亮度、对比度
/** * 调整亮度、对比度 * * @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); ...
重新运行代码
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!

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

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

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

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]

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


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

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
Small size, syntax highlighting, does not support code prompt function

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 Linux new version
SublimeText3 Linux latest version

Zend Studio 13.0.1
Powerful PHP integrated development environment