Cet article décrit la méthode Java pour ajouter des filigranes d'image, des filigranes de texte et des mosaïques aux images. Partagez-le pour votre référence, comme suit:
Vous pouvez créer une nouvelle classe Utils dans Eclipse, copier le code suivant et l'utiliser directement, et la méthode suivante réalise l'ajout de filigranes uniques ou multiples.
package com.rzxt.fyx.common.util; import java.awt.alphacomposite; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awing.image; import java.awt.renderinghints; import java.awt.image.bffrereDiMage; java.io.file; import javax.imageio.imageio; import javax.swing.imageicon; / ** * ajouter un filigrane à l'image * @author tgy * * / public class markimageutils {/ ** * @param args * / public static void main (string [] args) {String output = "f: / images /";; String source = "f: /images/6.jpg"; // Image d'image source ICON ICON = "f: /images/icon2.png"; // Overcover Image Path String ImageName = "Mark_image"; // Nom d'image String ImageType = "JPG"; // Type d'image jpg, jpeg, png, gif string text = "watermarked"; int size = 4; // Mosaic Taille entier degré = null; // L'angle de rotation de filigrane est de -45, null signifie ne pas faire tourner le résultat de la chaîne = null; // Ajouter un filigrane de l'image au résultat de l'image = markimageutils.markemagebymoreicon (icône, source, sortie, imageName, imagetype, degré); // result = markImageUtils.markeMageBysingleIcon (icône, source, sortie, imageName, imageType, degré); // Ajouter un filigrane de texte à l'image // result = markimageutils.markemageByMoreText (source, output, imageName, ImageType, Color.Red, Text, Degree); // result = markimageUtils.markeMageBysingleText (Source, Output, ImageName, ImageType, Color.red, Text, degré); // // mosaic The Image // Result = MarkImageUtils.markeMageByMosaic (source, sortie, imageName, ImageType, taille); System.out.println (résultat); } / ** * Ajouter plusieurs filigranes de l'image à différents emplacements de l'image et définir l'angle de rotation de l'image de filigrane * @param chemin d'image de watermark icône (tel que: f: /images/icon.png) * @param chemin d'image source sans filigrane (tel que: f: /images/6.jpg) * @Param Sortie du chemin de l'image après un arrosage (tel Comme: 11111) * @param ImageType Type d'image (tel que: jpg) * @param degré l'angle de rotation de l'image de filigrane, null signifie aucune rotation * / public static markimagebyagebymoreicon (ICON de chaîne, source de chaîne, sortie de chaîne, image de l'image, watermarme, string imageType, Integer Degree) {String result = "Erreur Ajouter une image Watermark"; try {file file = new File (source); Fichier FiCon = nouveau fichier (icône); if (! file.isfile ()) {return source + "pas un fichier image!"; } // Chargez l'icône dans l'image de mémoire Ic = ImageIo.read (FICON); // Hauteur d'icône int iheight = ic.getheight (null); // Lisez l'image source dans l'image de mémoire img = imageo.read (fichier); // Image Width int largeth = img.getWidth (null); // Image Height int hauteur = img.getheight (null); BufferedImage BI = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); // Créer un objet Graphics2D avec un BufferedImage Graphics2d G = bi.createGraphics (); // x, l'axe y est par défaut à partir de 0 coordonnées int x = 0; int y = 0; // La hauteur d'intervalle des deux images de filigrane est 1/3 de l'image de filigrane int temp = iheight / 3; Int espace = 1; if (height> = iheight) {Space = height / iheight; if (espace> = 2) {temp = y = iheight / 2; if (espace == 1 || espace == 0) {x = 0; y = 0; }}} else {x = 0; y = 0; } // Définissez le traitement de bord de déchaînement du segment de ligne g.setRenderingHint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); // représente une image et convertir de l'espace d'image en espace utilisateur avant de dessiner g.DrawImage (img.getScaledInstance (largeur, hauteur, image.scale_smooth), 0,0, null); pour (int i = 0; i <espace; i ++) {if (null! = degré) {// Définissez la rotation du filigrane g.rotate (math.toradians (degré), (double) bi.getWidth () / 2, (double) bi.getheight () / 2); } // Le chemin de l'image de filigrane est généralement GIF ou PNG, afin que la transparence puisse être définie ImageIcon IMGICON = new ImageIcon (icône); // Obtenez l'objet d'image. Image con = imgicon.getImage (); // Transparence, la valeur minimale est de 0, la valeur maximale est de 1 clarté de flotteur = 0,6f; g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, clarté)); // indique la position de coordonnée de l'image de filigrane (x, y) //g.Drawimage(con, 300, 220, null); G.Drawimage (Con, X, Y, NULL); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); y + = (icheight + temp); } g.dispose (); Fichier sf = nouveau fichier (sortie, imageName + "." + ImageType); ImageIo.Write (BI, ImageType, SF); // Enregistrer l'image Résultat = "Le filigrane de l'icône est ajouté une fois l'image terminée"; } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Ajoutez un filigrane d'image unique à l'image et définissez l'angle de rotation de l'image du filigrane * @param icône Watermark Chemin d'image (tel que: f: /images/icon.png) * @param chemin d'image source sans filigrane (tel que: f: /images/6.jpg) * @param Sortie le chemin de l'image après l'ajout d'un nom (tel que: F: / Images /) * @param 11111) * @param ImageType Type d'image (tel que: jpg) * @param degré l'angle de rotation de l'image de filigrane, null signifie aucune rotation * / public static markImImageBySingleIcon (Icône de chaîne, source de chaîne, sortie de chaîne, ImageName String, string ImageType, entier de degré) {String result = "Erreur Ajouter une image Watermark"; try {file file = new File (source); Fichier FiCon = nouveau fichier (icône); if (! file.isfile ()) {return source + "pas un fichier image!"; } // Chargez l'icône dans l'image de mémoire Ic = ImageIo.read (FICON); // Hauteur d'icône int iheight = ic.getheight (null); // Lisez l'image source dans l'image de mémoire img = imageo.read (fichier); // Image Width int largeth = img.getWidth (null); // Image Height int hauteur = img.getheight (null); BufferedImage BI = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); // Créez un objet Graphics2D avec un tampon spécifié. Graphics2d g = bi.creategraphics (); // x, l'axe y est par défaut à partir de 0 coordonnées int x = 0; int y = (hauteur / 2) - (iheight / 2); // Définissez le traitement de bord de déchaînement du segment de ligne g.setRenderingHint (RenderingHint.key_interpolation, RenderingHint.value_interpolation_bilinear); // représente une image et convertir de l'espace d'image en espace utilisateur avant de dessiner g.DrawImage (img.getScaledInstance (largeur, hauteur, image.scale_smooth), 0,0, null); if (null! = degré) {// Réglez la rotation du filigrane g.rotate (math.toradians (degré), (double) bi.getWidth () / 2, (double) bi.getheight () / 2); } // Le chemin de l'image de filigrane est généralement GIF ou PNG, de sorte que la transparence peut être définie ImageIcon IMGICON = new ImageIcon (icône); // Obtenez un objet d'image. Image con = imgicon.getImage (); // Transparence, la valeur minimale est de 0, la valeur maximale est de 1 clarté de flotteur = 0,6f; g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, clarté)); // indique la position de coordonnée de l'image de filigrane (x, y) //g.Drawimage(con, 300, 220, null); G.Drawimage (Con, X, Y, NULL); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); g.dispose (); Fichier sf = nouveau fichier (sortie, imageName + "." + ImageType); ImageIo.Write (BI, ImageType, SF); // Enregistrer l'image Résultat = "Le filigrane de l'icône est ajouté une fois l'image terminée"; } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Ajouter plusieurs avertissements de texte à l'image et définir l'angle de rotation du texte de watermark * @param source le chemin d'image qui doit être ajouté (tel que: f: /images/6.jpg) * @param Sortie le chemin de sortie de l'image après l'ajout de watermark (tel que: f: / images /) * @param ImageName Nom (tel que: 1111) * @Param Imagetype Type d'image (tel: jpg) Couleur de la couleur du texte de filigrane * @param mot watermark text * @param degré l'angle de rotation du texte de filigrane, ce qui signifie pas de rotation * / public static String markImageByMoreText (source de chaîne, sortie de chaîne, chaîne ImageName, chaîne ImageType, couleur, couleur de chaîne, degré entier) {String Result = "Erreur d'erreur ajout de texte Watermark"; essayez {// lire le fichier d'informations d'image d'origine Fichier = nouveau fichier (source); if (! file.isfile ()) {return file + "pas un fichier image!"; } Image img = imageo.read (fichier); // Image Width int largeth = img.getWidth (null); // Image Height int hauteur = img.getheight (null); // Taille de texte Int Taille = 50; // Ajouter un watermark BufferedImage BI = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); Graphics2d g = bi.creategraphics (); G.DrawImage (IMG, 0, 0, largeur, hauteur, null); // Réglez la police de style de police de filigrane = nouvelle police ("宋体", font.plain, taille); // Réglez la couleur du filigrane en fonction de l'arrière-plan de l'image g.setColor (couleur); int x = largeur / 3; int y = taille; Int espace = hauteur / taille; pour (int i = 0; i <espace; i ++) {// Si l'axe y de la dernière coordonnée est supérieur à la hauteur, sortez directement si ((y + taille)> hauteur) {break; } if (null! = degré) {// Réglez la rotation du filigrane g.rotate (math.toradians (degré), (double) bi.getWidth () / 2, (double) bi.getheight () / 2); } g.setfont (font); // Position de filigrane G.Drawstring (mot, x, y); y + = (2 * taille); } g.dispose (); // Fichier d'image de sortie SF = nouveau fichier (sortie, imageName + "." + ImageType); ImageIo.Write (BI, ImageType, SF); // Enregistrer le résultat de l'image = "Ajouter un filigrane du mot après l'achèvement de l'image"; } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Ajoutez un seul filigrane de texte à l'image et définissez l'angle de rotation de texte de filigrane * @param source le chemin d'image qui doit être ajouté avec un filigrane (tel que: f: /images/6.jpg) * @param Sortie le chemin de sortie de l'image après avoir ajouté un watermark (tel que: f: / images /) * @Param Image Name (tel que: 1111) * @Param ImageType Type (tel que: JPG) *: JPG) * @param couleur La couleur du texte de filigrane * @param mot watermark text * @param degré de rotation angle du texte de filigrane, ce qui signifie pas de rotation * / public static static markImageBysinglext (source de chaîne, sortie de chaîne, chaîne ImageName, string imageType Color, corde word, entier degré) {String result = "Erreur ajout de texte Watermark"; essayez {// lire le fichier d'informations d'image d'origine Fichier = nouveau fichier (source); if (! file.isfile ()) {return file + "pas un fichier image!"; } Image img = imageo.read (fichier); int width = img.getWidth (null); int hauteur = img.getheight (null); // Ajouter un watermark BufferedImage BI = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); Graphics2d g = bi.creategraphics (); G.DrawImage (IMG, 0, 0, largeur, hauteur, null); // Réglez la police de style de police de filigrane = nouvelle police ("宋体", font.plain, 50); // Réglez la couleur du filigrane en fonction de l'arrière-plan de l'image g.setColor (couleur); if (null! = degré) {// Réglez la rotation du filigrane g.rotate (math.toradians (degré), (double) bi.getWidth () / 2, (double) bi.getheight () / 2); } g.setfont (font); int x = largeur / 3; int y = hauteur / 2; // Position de filigrane G.Drawstring (mot, x, y); g.dispose (); // Fichier d'image de sortie SF = nouveau fichier (sortie, imageName + "." + ImageType); ImageIo.Write (BI, ImageType, SF); // Enregistrer le résultat de l'image = "Ajouter un filigrane du mot après l'achèvement de l'image"; } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Ajouter de la mosaïque à l'image * @param source d'image d'image d'origine (tel que: f: /images/6.jpg) * @param sortie après la mosaïque, le chemin pour enregistrer l'image (tel que: f: / images /) * @param Imagename Nom (tel que: 11111) * @param image image type (tel que: jpg) * @Param Taille mosaic, qui est, tel que: JPG) * de chaque rectangle * @return * / public static String MarkImageByMosaic (Source de chaîne, sortie de chaîne, chaîne ImageName, String ImageType, int size) {String result = "Image Mosaic Error s'est produit"; try {file file = new File (source); if (! file.isfile ()) {return file + "pas un fichier image!"; } BufferedImage img = imageo.read (fichier); // Lire l'image int width = img.getWidth (null); // Largeur d'image d'origine int hauteur = img.getheight (null); // Hauteur d'image d'origine BufferedImage BI = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); // La taille de la grille de mosaïque est trop grande ou trop petite si (largeur <taille || hauteur <taille) {return "La taille de la grille de mosaïque est trop grande"; } if (taille <= 0) {return "La taille de la grille mosaïque est trop petite"; } int xcount = 0; // dessine le nombre dans x direction int yCount = 0; // dessine le nombre dans la direction y if (largeur% taille == 0) {xcount = largeur / taille; } else {xcount = largeur / taille + 1; } if (height% size == 0) {yCount = hauteur / taille; } else {yCount = hauteur / taille + 1; } int x = 0; // x coordonnée int y = 0; // coordonnée y coordonnée // dessiner la mosaïque (dessiner des rectangles et des couleurs de remplissage) graphiques2d g = bi.creategraphics (); for (int i = 0; i <xcount; i ++) {for (int j = 0; j <ycount; j ++) {// Mosaic rectangle size int mwidth = size; int mheight = taille; if (i == xcount-1) {// Le dernier dans la direction horizontale n'est pas suffisant pour une taille mwidth = width-x; } if (j == yCount-1) {// Le dernier dans la direction verticale n'est pas suffisant pour une taille mheight = height-y; } // La valeur RVB de la couleur rectangle prend le pixel 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 = new Color (IMG.GetRGB (CenterX, Centery)); g.setColor (couleur); G.Fillrect (X, Y, Mwidth, Mheight); y = y + taille; // Calculez la coordonnée y du rectangle suivant} y = 0; // restaurer la coordonnée y x = x + taille; // calculer la coordonnée x} g.dispose (); Fichier sf = nouveau fichier (sortie, imageName + "." + ImageType); ImageIo.Write (BI, ImageType, SF); // Enregistrer l'image Result = "Mosaic Success"; } catch (exception e) {e.printStackTrace (); } Retour Résultat; }}Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Résumé des compétences de l'opération d'image Java", "Résumé des compétences de date et d'opération de temps Java", "Résumé des compétences de nœuds de Dom Java", "Résumé du fichier Java et des compétences de fonctionnement des répertoires" et "Tutorials de la structure de données et de l'algorithme Java".
J'espère que cet article sera utile à la programmation Java de tous.