Heim > Java > javaLernprogramm > Wie implementiert Java Bildverarbeitung und P-Bilder?

Wie implementiert Java Bildverarbeitung und P-Bilder?

PHPz
Freigeben: 2023-05-07 09:07:15
nach vorne
1512 Leute haben es durchsucht

准备阶段

原图(来源于网络)

Wie implementiert Java Bildverarbeitung und P-Bilder?

PS处理后的模板图

Wie implementiert Java Bildverarbeitung und P-Bilder?

待合成图片

Wie implementiert Java Bildverarbeitung und P-Bilder?

图片合成

基本步骤

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

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

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

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

代码

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

<dependency>
	<groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
	<version>0.4.8</version>
</dependency>
Nach dem Login kopieren
/**
 * 横坐标
 */
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));
}
Nach dem Login kopieren

运行代码

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

Wie implementiert Java Bildverarbeitung und P-Bilder?

调整图片亮度、对比度

/**
 * 调整亮度、对比度
 *
 * @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;
}
Nach dem Login kopieren

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

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

重新运行代码

Wie implementiert Java Bildverarbeitung und P-Bilder?

Das obige ist der detaillierte Inhalt vonWie implementiert Java Bildverarbeitung und P-Bilder?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage