Ces deux jours, j'ai téléchargé des images en fonction de mes besoins. Pour être honnête, je ne sais pas que Java peut fonctionner comme ça. Comme il y a une exigence, je suis allé trouver les informations et je l'ai étudiée. Je vais le partager maintenant, dans l'espoir d'aider les frères dans le besoin.
L'ajout de filigranes aux images ordinaires est différente de l'ajout de filigranes aux animations. L'ajout de filigranes aux images ordinaires est écrite dans la propre méthode de Java. Le cadre GIF4J est utilisé pour les animations. Il existe de nombreux frameworks qui peuvent être téléchargés dans CSDN. Il est recommandé de télécharger la version fissurée, car le package JAR d'origine aura un filigrane qui ne peut pas être utilisé.
import java.awt. *; Importer java.awt.image.bufferedImage; importer java.io. *; import javax.imageio.imageio; import javax.swing.imageicon; // Ceci est la classe du framework GIF4J IMPORT COM.GIF4J.GIFDECODER; import com.gif4j.gifencoder; import com.gif4j.gifimage; import com.gif4j.giftransformateur; import com.gif4j.textpainter; import com.gif4j.watermark; / ** * Créé par ZXD le 2018/1/18. * / classe publique ImageRemarkutil {// Watermark Transparency Private Float Alpha = 0,5f; // Watermark Position horizontale private int positionwidth = 150; // Position verticale de filigrane privative int positionneht = 300; // Watermark Largeur private int largeth = 80; // filigrane haute hauteur privée intrugs = 80; // Font de texton de font de font de police privée = nouvelle police ("宋体", font.bold, 72); // Texte de filigrane Couleur de couleur privée Color = Color.Red; / ********************* Image normale avec watermark ********** / / ** * * @param alpha * WaterMark Transparency * @param positionwidth * watermark Horizontal Position * @param positionneight * Watermark Position * @param font Font * WaterMark Text Font * @param colori * watermark colore * Public Void SetImagagagMarkOptions. positionnehight, largeur int, hauteur int, police, couleur couleur) {if (alpha! = 0,0f) this.alpha = alpha; if (positionwidth! = 0) this.positionwidth = positionwidth; if (positionnehight! = 0) this.PositionHeight = PositionHeight; if (hauteur! = 0) this.height = hauteur; if (largeur! = 0) this.width = largeur; if (font! = null) this.font = font; if (couleur! = null) this.color = couleur; } / ** * Ajouter une image de filigrane à l'image * * @param iconPath * Watermark Image Path * @param srcimgpath * Path d'image source * @param ciblePath * Target Image Path * / public void markImagebyicon (String iconPath, String SrciMgpath, String TargetPath) {markImAcyIcon (iconpath, SrciMgpath, {markImyIcon); } / ** * Ajoutez une image de filigrane à l'image et définissez l'angle de rotation de l'image de filigrane * * @param iconpath * chemin d'image de watermark * @param srcimgpath * Path d'image source * @param ciblePath * Target Image Path * @param degré * Watermark Image Angle OutputStream os = null; try {image srcimg = imageo.read (nouveau fichier (srcimgpath)); BufferedImage BuffImg = new BufferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedImage.type_int_rgb); // 1. Obtenez l'objet Brush Graphics2d G = Buffimg.CreateGraphics (); // 2. Définissez le traitement des bords de déchaînement du segment de ligne g.setRenderingHint (RenderingHint.key_interpolation, RenderingHint.value_interpolation_bilinear); G.DrawImage (srcimg.getScaledInstance (srcimg.getWidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 3. Réglez la rotation du filigrane if (null! = Degré) {g.rotate (math.toradians (degré), (double) buffimg.getWidth () / 2, (double) buffimg.getheight () / 2); } // 4. Le chemin de l'image de filigrane L'image de filigrane est généralement gif ou png, afin que la transparence puisse être définie ImageIcon imgicon = new ImageIcon (iconPath); // 5. Obtenez l'objet image. Image img = imgicon.getImage (); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); Entier x = srcimg.getWidth (null); Entier y = srcimg.getheight (null); // 6. L'emplacement de l'image de filigrane G.Drawimage (IMG, X- (Positionwidth + Largeth), y- (positionneight + hauteur), largeur, hauteur, nul); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 7. Libérez la ressource g.dispose (); // 8. Générer l'image OS = new FileOutputStream (TargerPath); Imageo.write (buffimg, "jpg", os); System.out.println ("image complète Ajouter une image de filigrane"); } catch (exception e) {e.printStackTrace (); } enfin {try {if (null! = os) os.close (); } catch (exception e) {e.printStackTrace (); }}}} / ** * Ajouter du texte de filigrane à l'image * * @param logotext * Texte de watermark * @param srcimgpath * chemin d'image source * @param ciblePath * Target Image Path * / public void markImageByText (String Logotext, String srcimgpath, string targetPath) {markImyText (logotext, srcimgpath, ciblePath, null); } / ** * Ajouter du texte de filigrane à l'image et définir l'angle de rotation du texte de filigrane * * @param logotext * @param logotext * @param srcimgpath * @param ciblePath * @param degré * / public void markImageByText (String Logotext, String srcimgpath, String TargetPath, INTERGER DEGRAD) {Entréeststream is = null; OutputStream os = null; essayez {// 1. Image source Image srcimg = imageo.read (nouveau fichier (srcimgPath)); BufferedImage BuffImg = new BufferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedImage.type_int_rgb); // 2. Obtenez l'objet Brush Graphics2d G = BuffImg.CreateGraphics (); // 3. Définissez le traitement de bord de déchaînement du segment de ligne g.setRenderingHint (RenderingHint.key_interpolation, renderinghints.value_interpolation_bilinear); G.DrawImage (srcimg.getScaledInstance (srcimg.getWidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 4. Set Watermark Rotation if (null! = Degré) {g.rotate (math.toradians (degré), (double) buffimg.getWidth () / 2, (double) buffimg.getheight () / 2); } // 5. Set Watermark Text Color g.setColor (couleur); // 6. Set Watermark Text Font g.setfont (font); // 7. Set Watermark Text Transparence G.SetComposite (Alphacomposite.getInstance (Alphacomposite.Src_atop, alpha)); // 8. Le premier paramètre -> Définir le contenu, les deux paramètres suivants -> Position de coordonnées du texte sur l'image (x, y) G.Drawstring (logotext, positionwidth, positionnement de position); // 9. Libérez la ressource g.dispose (); // 10. Générer l'image os = new FileOutputStream (TargerPath); Imageo.write (buffimg, "jpg", os); System.out.println ("Image Complete Ajouter un texte de filigrane"); } catch (exception e) {e.printStackTrace (); } enfin {try {if (null! = is) is.close (); } catch (exception e) {e.printStackTrace (); } essayez {if (null! = os) os.close (); } catch (exception e) {e.printStackTrace (); }}} / ***************. Objet GifImage. GifImage resizeImg = giftRansformrer.resize (gifImage, largeur, hauteur, vrai); GIDEENCODER.Encode (ResizeImg, dest); } // Échec de l'image GIF, transmettez directement le chemin du fichier et définissez la largeur et la hauteur publique void Makegif (String Src, String dest, int, int height) lance ioException {gifImage gifImage = gifdecoder.decode (nouveau fichier (src)); // créer un objet GifImage. MakeGif (nouveau fichier (src), nouveau fichier (dest), gifimage.getScreenWidth () / 2, gifimage.getScreenHeight () / 2); } // La mise à l'échelle de l'image GIF, le fichier de passage, la largeur et la hauteur ne peuvent pas être définis publics void makegif (fichier src, file dest) lève ioException {gifImage gifImage = gifdecoder.decode (src); // créer un objet gifage. MakeGif (src, dest, gifimage.getScreenWidth () / 2, gifImage.getScreenHeight () / 2); } // Mise à l'échelle de l'image GIF, passant le chemin de fichier et ne pas définir la largeur et la hauteur publique void Makegif (String Src, String dest) lève ioException {MakeGif (nouveau fichier (src), nouveau fichier (dest)); } / ** * Ajouter un filigrane de texte à l'animation * / public void addTextWaterMarkTogif (fichier src, string watermarkText, fichier dest) lève ioException {// watermark Initialisation and Retting (Font, Style, Size, Color) textpainter textpainter = new TextPainter (new Font ("Bold", Font.italic, 12)); TextPainter.SetoutLinePaint (Color.White); BufferedImage RenderedWaterMarkText = TextPainter.Renderstring (WaterMarkText, true); // Objet d'image GifImage gf = gifdecoder.decode (src); // Obtenez la taille de l'image int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Obtenez la taille du filigrane int tw = renderedwatermarkText.getWidth (); int th = renderedwatermarktext.getheight (); // point de filigrane p = nouveau point (); px = iw - tw - 5; py = ih - th - 4; // Ajouter un filigrane filigrane = nouveau filigrane (RenderedWatermarkText, P); gf = watermark.apply (gifdecoder.decode (src), true); // Sortie GIDEENCODER.Encode (GF, DEST); } / ** * Ajouter un filigrane d'image dans l'animation * / public void addImageWaterMarkTogif (fichier src, string watermarkpath, file dest) {try {bufferedImage renderedwatermarkText = imageo.read (nouveau fichier (watermarkpath)); // Objet d'image GifImage gf = gifdecoder.decode (src); // Obtenez la taille de l'image int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Obtenez la taille du filigrane int tw = renderedwatermarkText.getWidth (); int th = renderedwatermarktext.getheight (); // Point de position de filigrane p = nouveau point (); px = iw-tw-20; py = IH-TH-20; // Watermark Watermark Watermark = Nouveau filigrane (RenderedWatermarkText, P); // Watermark Transparency Watermark.SetTransparence (1); gf = watermark.apply (gifdecoder.decode (src), false); // Sortie GIDEENCODER.Encode (GF, DEST); } catch (ioException e) {e.printStackTrace (); }} public static void main (String [] args) {// chemin où l'image doit être filigranée dans la chaîne srcimgpath = "d: /1.jpg"; String logotext = "copy invalid"; // Le chemin de la chaîne de watermark d'image iconpath = "d: /2.jpg"; // Le chemin de sortie de la chaîne de fichier de filigrane TargetTextPath = "D: /qie_text.jpg"; String TargetTextPath2 = "d: /qie_text_rotate.jpg"; String TibiliceConPath = "d: /qie_icon.jpg"; String TargeConPath2 = "d: /qie_icon_rotate.jpg"; System.out.println ("Pour commencer à ajouter du texte de filigrane à l'image ..."); // Le texte de filigrane de l'image MarkImageByText (Logotext, SrciMgPath, TargetTextPath); // ajouter du texte de filigrane à l'image, rotation de texte de filigrane -45 MarkImageByText (Logotext, SrciMgPath, TargetTextPath2, -45); System.out.println ("Ajouter du texte de filigrane à l'image, end ..."); System.out.println ("Ajouter une image de filigrane à l'image, démarrer ..."); setImageMarkOptions (0,3f, 1, 1, null, null); // Ajouter une image de filigrane à l'image, rotation d'image de filigrane -45 MarkImageByicon (iconPath, SrciMgpath, TibIConPath2, -45); System.out.println ("Ajouter un filigrane à l'image se termine ..."); // Ajouter un filigrane dans l'image d'animation (ajouter un fichier d'animation de filigrane, ajouter Watermark, ajouter un fichier de sortie) addTextWaterMarkTogif (nouveau fichier ("d: //10.gif"), "copy invalid", nouveau fichier ("d: //11.gif")); addImageWaterMarkTogif (nouveau fichier ("d: //gif//10.gif"), "d: //gif//3.png", nouveau fichier ("d: //gif//4.gif")); }}Voici les méthodes d'ajout de filigranes aux images ordinaires et de l'ajout de filigranes aux animations. Si la méthode d'ajout de filigranes aux images ordinaires peut être ajoutée avec succès si l'image est transmise, l'image deviendra statique. Si la méthode d'ajout de filigranes aux animations est transmise, l'erreur sera signalée directement.
Je les ai essayés quand je les faisais, donc je vais prendre des notes et les enregistrer ici maintenant, et j'espère qu'ils pourront aider les frères dans le besoin.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.