Java implementa agregar texto (marca de agua) a las imágenes

Comparta uno hoy: agregue texto a las imágenes a través del código Java.

Por ejemplo, en la imagen a continuación, agregamos una versión de texto de la marca de agua en la esquina inferior izquierda, entonces, ¿cómo se logra esto?

contenido

[1] Obtener el objeto de imagen original

(1.1) Leer imágenes locales

(1.2) Leer imágenes de red

[2] Crear un pincel

【3】Añadir marca de agua de texto

(3.1) ¿Cómo determinar la posición de la marca de agua?

[4] Obtención y procesamiento de imágenes

【5】Código fuente


[1] Obtener el objeto de imagen original

En primer lugar, el primer paso es dejar que nuestro programa obtenga las imágenes que deben procesarse.

Por lo general, existen dos formas para que nuestro programa obtenga imágenes, una es descargarlas al local y leerlas desde el local; la otra es obtenerlas a través de la dirección de red.

(1.1) Leer imágenes locales

Por ejemplo, si descargamos la imagen a nuestra computadora local (directorio E:\imgs), entonces podemos obtener el objeto de la imagen directamente en la función principal a través del siguiente código. 

// 读取图片文件
File file = new File("E:/imgs/test.png");
System.out.println("图片名称:" + file.getName());
System.out.println("图片大小:" + file.length() / 1024 + " kb");
// 将文件对象转化为图片对象
BufferedImage image = ImageIO.read(file);
System.out.println("图片宽度:" + image.getWidth() + " px");
System.out.println("图片高度:" + image.getHeight() + " px");

 El efecto del código es el siguiente:

(1.2) Leer imágenes de red

Si la imagen es una imagen de red, podemos obtener directamente su dirección para descargar, el código relevante es el siguiente (el nombre y tipo de la imagen de red depende del descargador).

URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
BufferedImage image = ImageIO.read(url.openStream());
System.out.println("图片宽度:" + image.getWidth() + " px");
System.out.println("图片高度:" + image.getHeight() + " px");

El efecto del código es el siguiente:

[2] Crear un pincel

Después de la descripción anterior, hemos obtenido la imagen original. Luego, necesitamos crear un pincel. El estilo del texto que escribimos más tarde está completamente determinado por él. Puede establecer color, tamaño de fuente, estilo de fuente, etc.

// 创建画笔(image为上一步的图片对象)
Graphics2D pen = image.createGraphics();
// 设置画笔颜色为白色
pen.setColor(Color.WHITE);
// 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));

Instrucciones relacionadas:

(1) bolígrafo.setColor(Color.BLANCO); 

Lo que significa esta línea de código es establecer el color del pincel en blanco.

Otros colores son: BLANCO (blanco), LIGHT_GRAY (gris claro), GRAY (gris), DARK_GRAY (gris oscuro), BLACK (negro), RED (rojo), PINK (rosa), ORANGE (naranja), YELLOW (Amarillo) , VERDE (Verde), MAGENTA (Magenta), CIAN (Cian), AZUL (Azul)

Si ninguno de los colores anteriores le satisface, o si desea establecer la transparencia de la fuente, puede cambiar al siguiente formato:

pen.setColor(nuevo Color(179, 250, 233, 100));

Los cuatro parámetros aquí son RGBA ( haga clic aquí si no entiende RGBA ), y el rango de los cuatro parámetros es 0-255;

(2) pen.setFont(nueva Fuente("Microsoft Yahei", Font.ITALIC, 20));

Font.PLAIN (normal), Font.BOLD (negrita), Font.ITALIC (cursiva)

【3】Añadir marca de agua de texto

La siguiente línea de código es el código central para agregar marcas de agua de texto.

// 这三个参数分别为你的文字内容,起始位置横坐标(px),纵坐标位置(px)。
pen.drawString("我是图片水印", 30, 550);

(3.1) ¿Cómo determinar la posición de la marca de agua?

En primer lugar, todos deben entender que estamos hablando de las coordenadas en la imagen, que es una representación, de la siguiente manera:

Entonces, ¿cómo determinamos las coordenadas reales de la imagen que marcamos con agua?

Primero podemos guardar la imagen en el local, luego hacer clic derecho y seleccionar la clase de herramienta de pintura para abrirla.

 Después de abrir, movemos el cursor del mouse al lugar donde necesitamos agregar texto (como la flecha roja), y las coordenadas de la posición correspondiente (en la flecha azul) se mostrarán en la parte inferior, luego podemos obtener esto coordinar, y luego escribir en el código del programa.

[4] Obtención y procesamiento de imágenes

Después de las tres operaciones anteriores, nuestro texto agregado a la imagen ha sido procesado, pero aún está almacenado en el objeto Java, necesitamos guardarlo localmente, podemos ver el efecto (por ejemplo: aquí guardaré la imagen procesada en test2. png).

// 创建新图片文件
File file = new File("E:/imgs/test2.png");
// 将处理好的图片数据写入到新图片文件中
FileOutputStream fos = new FileOutputStream(file);
ImageIO.write(image, "png", fos);

Finalmente, cuando se ejecuta el código, vemos que hay una imagen adicional de test2.png debajo de la carpeta de imágenes original.

 Después de abrir la imagen test2.png, podemos ver que la marca de agua de texto se ha agregado correctamente.

【5】Código fuente

Finalmente, el código fuente completo de la interpretación anterior se coloca a continuación para su referencia:

package com.zyq.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

public class ImgTest {

    public static void main(String[] args) throws IOException {
        // 读取本地图片文件
        // File file = new File("E:/imgs/test.png");
        // System.out.println("图片名称:" + file.getName());
        // System.out.println("图片大小:" + file.length() / 1024 + " kb");
        // 将文件对象转化为图片对象
        // BufferedImage image = ImageIO.read(file);
        // 获取网络图片
        URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
        BufferedImage image = ImageIO.read(url.openStream());
        // 创建画笔
        Graphics2D pen = image.createGraphics();
        // 设置画笔颜色为白色
        // pen.setColor(Color.WHITE);
        pen.setColor(new Color(179, 250, 233, 200));
        // 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
        pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));
        // 写上水印文字和坐标
        pen.drawString("我是图片水印", 30, 550);
        // 创建新图片文件
        File file = new File("E:/imgs/test2.png");
        // 将处理好的图片数据写入到新图片文件中
        FileOutputStream fos = new FileOutputStream(file);
        ImageIO.write(image, "png", fos);
    }
}

Supongo que te gusta

Origin blog.csdn.net/sunnyzyq/article/details/122452216
Recomendado
Clasificación