Table des matières
准备阶段
图片合成
基本步骤
代码
运行代码
调整图片亮度、对比度
Maison Java javaDidacticiel Comment Java implémente-t-il le traitement d'image et les images P ?

Comment Java implémente-t-il le traitement d'image et les images P ?

May 07, 2023 am 09:07 AM
java

准备阶段

原图(来源于网络)

Comment Java implémente-t-il le traitement dimage et les images P ?

PS处理后的模板图

Comment Java implémente-t-il le traitement dimage et les images P ?

待合成图片

Comment Java implémente-t-il le traitement dimage et les images P ?

图片合成

基本步骤

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

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

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

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

代码

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

1

2

3

4

5

<dependency>

    <groupId>net.coobird</groupId>

    <artifactId>thumbnailator</artifactId>

    <version>0.4.8</version>

</dependency>

Copier après la connexion

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

/**

 * 横坐标

 */

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));

}

Copier après la connexion

运行代码

1

2

3

public static void main(String[] args) throws IOException {

    synthesis("D:\\local\\images\\weixin_payment_code.png", "D:\\local\\images\\result.png");

}

Copier après la connexion

Comment Java implémente-t-il le traitement dimage et les images P ?

调整图片亮度、对比度

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

/**

 * 调整亮度、对比度

 *

 * @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;

}

Copier après la connexion

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

1

2

3

4

5

6

...

// 调整待合成图的尺寸和旋转角度

image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage();

// 调整待合成图片的亮度、对比度

adjustBrightnessAndContrast(image);

...

Copier après la connexion

重新运行代码

Comment Java implémente-t-il le traitement dimage et les images P ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Racine carrée en Java

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Nombre parfait en Java

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Générateur de nombres aléatoires en Java

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Weka en Java

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Numéro Armstrong en Java

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Numéro de Smith en Java

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Questions d'entretien chez Java Spring

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Break or Return of Java 8 Stream Forach?

See all articles