Este artículo describe el método Java para agregar marcas de agua de imagen, marcas de agua y mosaicos a las imágenes. Compártelo para su referencia, como sigue:
Puede crear una nueva clase Utils en Eclipse, copiar el siguiente código y usarlo directamente, y el siguiente método se da cuenta de la adición de marcas de agua simples o múltiples.
paquete com.rzxt.fyx.common.util; import java.awt.alphacomposs; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image; import java.awt.renderinghints; import java.awt.image.image.image; java.io.file; import javax.Imageio.Imageio; import javax.swing.imageicon;/** * Agregue una marca de agua a la imagen * @author tgy * */public class MarkImageUtils {/** * @param args */public static void main (string [] args) {string outing = "f:/imágenes/"; "; String Source = "f: /images/6.jpg"; // stry de imagen de la fuente cadena icon = "f: /images/icon2.png"; // Stretch de la ruta de imagen OverCover ImageName = "Mark_Image"; // Nombre de imagen String imageType = "jpg"; // Tipo de imagen JPG, JPEG, PNG, GIF String Text = "Watermarked"; tamaño int = 4; // Mosaico tamaño entero grado = nulo; // El ángulo de rotación de la marca de agua es -45, NULL significa no rotar la cadena result = NULL; // Agregar marca de agua de imagen al resultado de la imagen = markImageUtils.markimagebymoreicon (icono, fuente, salida, nombre de imagen, imageType, grado); // resultado = markImageUtils.markImageBysingleicon (icono, fuente, salida, nombre de imaginación, imageType, grado); // Agregue la marca de agua de texto a la imagen // resultado = markImageUtilss.markimageByMoretext (fuente, salida, nombre de imaginación, imageType, color.red, text, grado); // result = markImageUtils.markiMageBySingLetext (fuente, salida, nombre de imaginación, imageType, color.red, text, grado); // // mosaic la imagen // result MarkImageUtils.markimagebymosaic (fuente, salida, nombre de imaginación, imageType, tamaño); System.out.println (resultado); }/** * Agregue múltiples marcas de agua de imagen a diferentes ubicaciones de la imagen, y establezca el ángulo de rotación de la imagen de la marca de agua * @param icon la ruta de imagen de la marca de agua (como: f: /images/icon.png) * @param Source imagen sin marca de agua (como: f: /images/6.jpg) * @param salida de la ruta de la imagen después de la marca de agua (como: f:/imágenes/) * @Param ImageMame 11111) * @param imageType Tipo de imagen (como: jpg) * @param grado El ángulo de rotación de la imagen de la marca de agua, nulo significa sin rotación */ public static string markimagebymoreicon (icon de cadena, fuente de cadena, salida de cadena, nombre de imagen de cadena, string imageType, grado entero) {string d. intente {archivo archivo = nuevo archivo (fuente); Archivo ficon = nuevo archivo (icono); if (! file.isfile ()) {return Source + "¡No es un archivo de imagen!"; } // Cargue el icono en la imagen de la memoria ic = imageIO.read (ficon); // altura de icono int iheight = ic.getheight (nulo); // leer la imagen de origen en la imagen de memoria img = imageIO.read (archivo); // Width de imagen int inth = img.getWidth (nulo); // Imagen altura int altura = img.getheight (nulo); BufferedImage bi = new BufferedImage (ancho, altura, bufferedimage.type_int_rgb); // Crear un objeto Graphics2D con un bufferedimage especificado Graphics2d g = bi.createGraphics (); // x, el eje y predeterminado se inicia desde 0 coordenadas int x = 0; int y = 0; // La altura del intervalo de las dos imágenes de la marca de agua es 1/3 de la imagen de la marca de agua int temp = iHeight/3; space int = 1; if (altura> = iHeight) {space = altura/iHeight; if (space> = 2) {temp = y = iHeight/2; if (space == 1 || space == 0) {x = 0; y = 0; }}} else {x = 0; y = 0; } // Establezca el procesamiento de borde irregular del segmento de línea G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilineal); // representa una imagen y convierte del espacio de imagen al espacio del usuario antes de dibujar G.DrawImage (img.getScaledInstance (ancho, altura, image.scale_smooth), 0,0, nulo); for (int i = 0; i <space; i ++) {if (null! = grado) {// establece la rotación de la marca de agua g.rotate (math.toradians (grado), (doble) bi.getwidth () / 2, (doble) bi.getheight () / 2); } // La ruta de la imagen de la marca de agua es generalmente GIF o PNG, de modo que la transparencia se puede configurar Imageicon imgicon = new Imageicon (icono); // Obtener el objeto de imagen. Image con = imgicon.getImage (); // La transparencia, el valor mínimo es 0, el valor máximo es 1 claridad flotante = 0.6f; G.SetComposite (alphacomposis.getInstance (alfacomposis.src_atop, clarity)); // indica la posición de coordenadas de la imagen de la marca de agua (x, y) //g.drawimage(con, 300, 220, nulo); G.DrawImage (Con, X, Y, NULL); G.SetComposite (alfacomposis.getInstance (alfacomposis.src_over)); y+= (icheight+temp); } G.Dispose (); Archivo sf = nuevo archivo (salida, nombre de imaginación+"."+ImageType); ImageIO.Write (BI, ImageType, SF); // Guardar el resultado de la imagen = "Se agrega la marca de agua del icon después de que se complete la imagen"; } catch (Exception e) {E.PrintStackTrace (); } resultado de retorno; }/** * Agregue una sola marca de agua de la imagen a la imagen y establezca el ángulo de rotación de la imagen de la marca de agua * @param icon Watermark ruta de imagen (como: f: /images/icon.png) * @param ruta de imagen de fuente sin marca de agua (como: f: /images/6.jpg) * @param Salida de la ruta de imagen después de agregar una acuarela (tales como: f:/imágenes/) * @param * @param imageType Tipo de imagen (como: jpg) * @param grado El ángulo de rotación de la imagen de la marca de agua, nulo significa que no hay rotación */ public static string markImagebySingingleicon (icon de cadena, fuente de cadena, salida de cadena, nombre de imagen, nombre de cadena imageType, grado entero) {string dutin = "Error agregando imágenes de agua";; intente {archivo archivo = nuevo archivo (fuente); Archivo ficon = nuevo archivo (icono); if (! file.isfile ()) {return Source + "¡No es un archivo de imagen!"; } // Cargue el icono en la imagen de la memoria ic = imageIO.read (ficon); // altura de icono int iheight = ic.getheight (nulo); // leer la imagen de origen en la imagen de memoria img = imageIO.read (archivo); // Width de imagen int inth = img.getWidth (nulo); // Imagen altura int altura = img.getheight (nulo); BufferedImage bi = new BufferedImage (ancho, altura, bufferedimage.type_int_rgb); // Cree un objeto Graphics2D con una BufferedImage especificada. Graphics2d g = bi.createGraphics (); // x, el eje y predeterminado se inicia desde 0 coordenadas int x = 0; int y = (altura/2)-(iHeight/2); // Establezca el procesamiento de borde irregular del segmento de línea G.SetRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilineal); // representa una imagen y convierte del espacio de imagen al espacio del usuario antes de dibujar G.DrawImage (img.getScaledInstance (ancho, altura, image.scale_smooth), 0,0, nulo); if (null! = grado) {// establece la rotación de la marca de agua g.rotate (math.toradians (grado), (doble) bi.getWidth () / 2, (doble) bi.getheight () / 2); } // La ruta de la imagen de la marca de agua es generalmente GIF o PNG, por lo que la transparencia se puede configurar Imageicon imgicon = new Imageicon (icono); // Obtener objeto de imagen. Image con = imgicon.getImage (); // La transparencia, el valor mínimo es 0, el valor máximo es 1 claridad flotante = 0.6f; G.SetComposite (alphacomposis.getInstance (alfacomposis.src_atop, clarity)); // indica la posición de coordenadas de la imagen de la marca de agua (x, y) //g.drawimage(con, 300, 220, nulo); G.DrawImage (Con, X, Y, NULL); G.SetComposite (alfacomposis.getInstance (alfacomposis.src_over)); G.Dispose (); Archivo sf = nuevo archivo (salida, nombre de imaginación+"."+ImageType); ImageIO.Write (BI, ImageType, SF); // Guardar el resultado de la imagen = "Se agrega la marca de agua del icon después de que se termine la imagen"; } catch (Exception e) {E.PrintStackTrace (); } resultado de retorno; }/** * Agregue múltiples marcas de agua de texto a la imagen y establezca el ángulo de rotación de texto de la marca de agua * @param Fuente La ruta de imagen que debe agregarse (como: f: /images/6.jpg) * @param salida de la ruta de salida de la imagen después de agregar la marca de agua (tales como: f:/images/) * @param ImageMage Name (como: 11111) * @param ImageM Tipo de imagen (como: jepg) Color del texto de la marca de agua* @param text de marcas de agua* @param grado El ángulo de rotación del texto de la marca de agua, que significa que no hay rotación*/ public static string markImageByMoretext (fuente de cadena, salida de cadena, nombre de imagen, cadena imageType, color color, palabra de cadena, grado entero) {string date = "Error de texto de texto";; Pruebe {// Leer archivo de información de imagen original Archivo = nuevo archivo (fuente); if (! file.isfile ()) {return File + "¡No es un archivo de imagen!"; } Imagen img = imageio.read (archivo); // Width de imagen int inth = img.getWidth (nulo); // Imagen altura int altura = img.getheight (nulo); // tamaño de texto int tamaño = 50; // Agregar marca de agua BufferedImage bi = new BufferedImage (ancho, altura, bufferedimage.type_int_rgb); Graphics2d g = bi.createGraphics (); G.DrawImage (img, 0, 0, ancho, altura, nulo); // establece la fuente de estilo de fuente de marca de agua = nueva fuente ("宋体", font.plain, size); // establecer el color de la marca de agua de acuerdo con el fondo de la imagen G.SetColor (color); int x = ancho/3; int y = tamaño; intbace int = altura/tamaño; para (int i = 0; i <space; i ++) {// Si el eje y de la última coordenada es más alta que la altura, salga directamente si ((y+tamaño)> altura) {break; } if (null! = grado) {// establece la rotación de la marca de agua g.rotate (math.toradians (grado), (doble) bi.getwidth () / 2, (doble) bi.getheight () / 2); } G.SetFont (fuente); // Posición de marca de agua G.DrawString (Word, X, Y); y+= (tamaño 2*); } G.Dispose (); // Archivo de imagen de salida SF = nuevo archivo (salida, nombre de imaginación+"."+ImageType); ImageIO.Write (BI, ImageType, SF); // Guardar el resultado de la imagen = "Agregar marca de agua de Word después de la finalización de la imagen"; } catch (Exception e) {E.PrintStackTrace (); } resultado de retorno; }/** * Agregue una sola marca de agua de texto a la imagen y establezca el ángulo de rotación de texto de la marca de agua * @param Fuente La ruta de imagen que debe agregarse con una marca de agua (como: f: /images/6.jpg) * @param salida de la ruta de salida de imagen después de agregar una marca de agua (como: f:/imágenes/) * @param ImageMame Nombre de imagen (como: 11111) * @Param Imageam Tipo (Tipo: Tipo de imagen: Tipo: Tipo de imagen: Tipo: Tipo de imagen:) @param Color el color del texto de la marca de agua* @param text de marca de agua* @param grado El ángulo de rotación del texto de la marca de agua, que significa que no hay rotación*/ public static string markImagebySingletext (fuente de cadena, salida de cadena, nombre de imagen, string imageType, color color, palabra de cadena, grado entero) {string dutur = "Error agregando texto de agua de agua"; Pruebe {// Leer archivo de información de imagen original Archivo = nuevo archivo (fuente); if (! file.isfile ()) {return File + "¡No es un archivo de imagen!"; } Imagen img = imageio.read (archivo); int width = img.getWidth (nulo); int altura = img.getheight (nulo); // Agregar marca de agua BufferedImage bi = new BufferedImage (ancho, altura, bufferedimage.type_int_rgb); Graphics2d g = bi.createGraphics (); G.DrawImage (img, 0, 0, ancho, altura, nulo); // establece la fuente de estilo de fuente de marca de agua = nueva fuente ("宋体", font.plain, 50); // establecer el color de la marca de agua de acuerdo con el fondo de la imagen G.SetColor (color); if (null! = grado) {// establece la rotación de la marca de agua g.rotate (math.toradians (grado), (doble) bi.getWidth () / 2, (doble) bi.getheight () / 2); } G.SetFont (fuente); int x = ancho/3; int y = altura/2; // Posición de marca de agua G.DrawString (Word, X, Y); G.Dispose (); // Archivo de imagen de salida SF = nuevo archivo (salida, nombre de imaginación+"."+ImageType); ImageIO.Write (BI, ImageType, SF); // Guardar el resultado de la imagen = "Agregar marca de agua de Word después de la finalización de la imagen"; } catch (Exception e) {E.PrintStackTrace (); } resultado de retorno; }/** * Agregue mosaic a la imagen * @param ruta de imagen original de origen (como: f: /images/6.jpg) * @param salida después de mosaicing, la ruta para guardar la imagen (como: f:/images/) * @param nombre de imagen del nombre de cada rectángulo * @return */ public static string markImageByMosaic (fuente de cadena, salida de cadena, nombre de imagen, nombre de cadena imageType, int size) {string result = "ocurrió un error mosaico de imagen"; intente {archivo archivo = nuevo archivo (fuente); if (! file.isfile ()) {return File + "¡No es un archivo de imagen!"; } BufferedImage img = imageIO.read (archivo); // leer la imagen int width = img.getWidth (nulo); // Ancho de imagen original int altura = img.getheight (nulo); // Altura de imagen original BufferedImage BI = nueva BufferedImage (ancho, altura, bufferedimage.type_int_rgb); // El tamaño de la cuadrícula mosaico es demasiado grande o demasiado pequeño si (ancho <tamaño || altura <tamaño) {return "El tamaño de la cuadrícula de mosaico es demasiado grande"; } if (tamaño <= 0) {return "El tamaño de la cuadrícula de mosaico es demasiado pequeño"; } int xCount = 0; // dibujar el número en x dirección int ycount = 0; // dibujar el número en y dirección if (ancho % size == 0) {xcount = width /size; } else {xcount = width / size + 1; } if (altura % size == 0) {ycount = altura / tamaño; } else {ycount = altura / tamaño + 1; } int x = 0; // x coordenada int y = 0; // y coordenada // dibujar mosaico (dibujar rectángulos y rellenar colores) gráficos2d g = bi.createGraphics (); for (int i = 0; i <xcount; i ++) {for (int j = 0; j <ycount; j ++) {// mosaico rectangle size int mwidth = size; int mHeight = tamaño; if (i == xcount-1) {// El último en la dirección horizontal no es suficiente para un tamaño mwidth = width-x; } if (j == ycount-1) {// El último en la dirección vertical no es suficiente para un tamaño mHEight = altura-y; } // El valor RGB del color rectángulo toma el píxel central int centerx = x; int centery = y; if (mwidth % 2 == 0) {centerx += mwidth / 2; } else {centerx += (mwidth - 1) / 2; } if (mHeight % 2 == 0) {Centery += mHeight / 2; } else {Centery += (mHeight - 1) / 2; } Color color = nuevo color (img.getrgb (CenterX, Centery)); G.SetColor (color); G.Fillrect (X, Y, Mwidth, Mheight); y = y + tamaño; // Calcule la coordenada y del siguiente rectángulo} y = 0; // restaurar la coordenada y x = x + tamaño; // Calcule la coordenada x} g.dispose (); Archivo sf = nuevo archivo (salida, nombre de imaginación+"."+ImageType); ImageIO.Write (BI, ImageType, SF); // Guardar el resultado de la imagen = "éxito mosaico"; } catch (Exception e) {E.PrintStackTrace (); } resultado de retorno; }}Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Resumen de habilidades de operación de imagen Java", "Resumen de habilidades de operación de fecha y hora de Java", "Resumen de las habilidades de nodo de operación de Java" "," Resumen de las habilidades de operación de archivos y directorio de Java "y" Tutoriales de estructura de datos de Java y algoritmo ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".". ".
Espero que este artículo sea útil para la programación Java de todos.