In diesen zwei Tagen habe ich Bilder nach meinen Bedürfnissen hochgeladen. Um ehrlich zu sein, weiß ich nicht, dass Java so funktionieren kann. Da es eine Anforderung gibt, habe ich die Informationen gefunden und sie studiert. Ich werde es jetzt teilen und hoffen, Brüdern in Not zu helfen.
Das Hinzufügen von Wasserzeichen zu normalen Bildern unterscheidet sich vom Hinzufügen von Wasserzeichen zu Animationen. Das Hinzufügen von Wasserzeichen zu normalen Bildern ist in der eigenen Methode von Java geschrieben. Das GIF4J -Framework wird für Animationen verwendet. Es gibt viele Frameworks, die in CSDN heruntergeladen werden können. Es wird empfohlen, die geknackte Version herunterzuladen, da das ursprüngliche JAR -Paket ein Wasserzeichen hat, das nicht verwendet werden kann.
import Java.awt.*; Import Java.awt.image.BuffenedImage; import Java.io.*; import Javax.imageo.imageo; import Javax.swing.imageicon; // Dies ist die Klasse des GIF4J -Frameworks import com.gif4j.gifdecoder; import com.gif4j.gifencoder; import com.gif4j.gifimage; import com.gif4j.giftransformer; import com.gif4j.textpainter; import com.gif4j.watermark; /*** Erstellt von ZXD am 2018/1/18. */ public class Imageremarkutil {// Wasserzeichen Transparenz privat float alpha = 0,5f; // Wasserzeichen Horizontale Position privat int Positionbreite = 150; // Wasserzeichen vertikale Position Private int PositionHeight = 300; // Wasserzeichenbreite private int width = 80; // Wasserzeichen High Private int Höhe = 80; // Watermark Text Font Private Font Font = New Font ("宋体", font.bold, 72); // Wasserzeichen Textfarbe private Farbe Farbe = Farbe.RED; /********************* Normal image with watermark**********/ /** * * @param alpha * Watermark transparency* @param positionWidth * Watermark horizontal position* @param positionHeight * Watermark vertical position* @param font * Watermark text font* @param color * Watermark text color*/ public void setImageMarkOptions(float alpha, int positionWidth, int PositionHeight, int Breite, inthöhe, Schriftart, Farbfarbe) {if (alpha! = 0,0f) this.alpha = alpha; if (Positionsbreite! = 0) this.positionwidth = Positionsbreite; if (PositionHeigh! = 0) this.positionHeight = PositionHeight; if (Höhe! = 0) this.height = Höhe; if (width! = 0) this.width = width; if (font! = null) this.font = font; if (color! = null) this.color = color; } / ** * Fügen Sie dem Bild ein Wasserzeichen -Bild hinzu * * @param iconPath * Wasserzeichen Bildweg * @param srcimgPath * Quellbildpfad * @param targetPath * Zielbildpfad * / public void markimageByicon (String IconPath, String Srcimgpath, String TargetPhode) {markimageByicon (iConpath, srcimgpath, null); } / *** Fügen Sie dem Bild ein Wasserzeichenbild hinzu und setzen Null; try {image srcimg = imageio.read (neue Datei (srcimgPath)); Bufferedimage buffimg = new bufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Holen Sie sich das Pinselobjekt Graphics2d g = buffimg.createGraphics (); // 2. Setzen Sie die zackige Kantenverarbeitung des Leitungssegments G.SetRenderingHint (renderingHints.key_interpolation, renderingHints.value_interpolation_bilinear); g.drawimage (srcimg.getScaledInstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 3.. Stellen Sie die Wasserzeichenrotation ein, wenn (null! } // 4. Der Pfad des Wasserzeichenbildes Das Wasserzeichenbild ist im Allgemeinen GIF oder PNG, so dass die Transparenz imageCon imgicon = new ImageCon (iConPath) festgelegt werden kann; // 5. Holen Sie sich das Bildobjekt. Bild img = imgicon.getImage (); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop, Alpha)); Ganzzahl x = srcimg.getwidth (null); Ganzzahl y = srcimg.getheight (null); // 6. Die Position des Wasserzeichenbildes G.Drawimage (IMG, X- (PositionSwidth+Breite), y- (PositionHeight+Höhe), Breite, Höhe, Null); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_over)); // 7. Veröffentlichen Sie die Ressource G. Dispose (); // 8. Image OS = New FileOutputStream (TargerPath) generieren; Imageio.Write (Buffimg, "JPG", OS); System.out.println ("Bild komplettes Wasserzeichen -Bild hinzufügen"); } catch (Ausnahme e) {e.printstacktrace (); } endlich {try {if (null! = os) os.close (); } catch (Ausnahme e) {e.printstacktrace (); } } } } /** * Add watermark text to the image * * @param logoText * Watermark text* @param srcImgPath * Source image path* @param targetPath * Target image path*/ public void markImageByText(String logoText, String srcImgPath, String targetPath) { markImageByText(logoText, srcImgPath, targetPath, null); } / ** * Fügen Sie dem Bild Wasserzeichen hinzu und setzen OutputStream os = null; try {// 1. Quellbild image srcimg = imageio.read (neue Datei (srcimgPath)); Bufferedimage buffimg = new bufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 2. Holen Sie sich das Pinselobjekt Graphics2d g = buffimg.createGraphics (); // 3.. Setzen Sie die zackige Kantenverarbeitung des Liniensegments G.SetRenderingHint (renderingHints.key_interpolation, renderingHints.value_interpolation_bilinear); g.drawimage (srcimg.getScaledInstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 4. Setzen Sie Wasserzeichenrotation If (null! = Grad) {g.Rotate (math.toradians (Grad), (doppelte) buffimg.getwidth () / 2, (doppelte) buffimg.getheight () / 2); } // 5. Setzen Sie die Textmarke Textfarbe G.SetColor (Farbe); // 6. Setzen Sie die Textmark -Textschrift G.Setfont (Schrift); // 7. Setzen Sie Wasserzeichen Texttransparenz G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop, Alpha)); // 8. Der erste Parameter -> Inhalt festlegen, die nächsten beiden Parameter -> Koordinatenposition des Textes auf dem Bild (x, y) g.drawstring (logotext, Positionbreite, PositionHeight); // 9. Veröffentlichen Sie die Ressource G. Dispose (); // 10. Generieren Sie das Bild os = new FileOutputStream (TargerPath); Imageio.Write (Buffimg, "JPG", OS); System.out.println ("Bild vollständiges Wasserzeichen addieren"); } catch (Ausnahme e) {e.printstacktrace (); } endlich {try {if (null! = is) is.close (); } catch (Ausnahme e) {e.printstacktrace (); } try {if (null! = os) os.close (); } catch (Ausnahme e) {e.printstacktrace (); }}} / ********************* Das Animationsbild ist Wasserzeichen* Gifdecoder.decode (SRC); // Erstellen Sie ein Gifimage -Objekt. Gifimage reizeImg = giftransformer.resize (Gifimage, Breite, Höhe, wahr); Gifencoder.encode (REIRSIZEIMG, dest); } // skalieren Sie das GIF -Bild, übergeben Sie den Dateipfad direkt und setzen Sie die Breite und die Höhe öffentlicher Leere Madegif (String SRC, String Dest, int Breite, inthohe). makegif (neue Datei (SRC), neue Datei (dest), gifimage.getscreenwidth () / 2, gifimage.getscreenHeight () / 2); } // Skalierung von GIF -Bild, Dateidatei, Breite und Höhe kann nicht public void makegif festgelegt werden (Datei SRC, Dateidest) löst IOException aus {gifimage gifimage = gifdecoder.decode (SRC); // Erstellen eines Gifimage -Objekts. makegif (src, dest, gifimage.getscreenwidth () / 2, gifimage.getscreenHeight () / 2); } // skalieren GIF -Bild, Dateipfad übergeben und keine Breite und Höhe public void makegif (String src, String dest) löscht IOException {makegif (neue Datei (SRC), neue Datei (dest)); } /*** Textwasserzeichen zur Animation hinzufügen* /public void addTextwatermarkTogif (Datei SRC, String Watermarktext, Dateidest) löst ioException {// Wasserzeichen -Initialisierung und -Auseinstellung (Schriftart, Stil, Größe, Farbe) textPainter textpaine = new textPainter (New Font ("Bold", Font.Inic, 12); textPainter.SeToutlinePaint (color.white); PufufferedImage renderedwatermarktext = textPainter.rendersstring (Wassermarktext, true); // Bildobjekt Gifimage gf = gifdecoder.decode (SRC); // Die Bildgröße int iw = gf.getscreenwidth () abrufen; int ih = gf.getscreenHeight (); // Erhalten Sie die Wasserzeichengröße int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getheight (); // Wasserzeichen Punkt p = neuer Punkt (); px = iw - tw - 5; py = ih - th - 4; // Wasserzeichen Wasserzeichen Wasserzeichen = neues Wasserzeichen (Renderedwatermarktext, p); gf = watermark.apply (GifDeCoder.decode (SRC), TRUE); // Ausgabe gifeCoder.encode (gf, dest); } / *** Image Watermark in die Animation hinzufügen* / public void addimagewatermarktogif (Datei SRC, String WatermarkPath, Datei destnagend) {try {bufferedImage renderedwatermarkext = imageio.read (neue Datei (WatermarkPath)); // Bildobjekt Gifimage gf = gifdecoder.decode (SRC); // Die Bildgröße int iw = gf.getscreenwidth () abrufen; int ih = gf.getscreenHeight (); // Erhalten Sie die Wasserzeichengröße int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getheight (); // Wasserzeichen Positionspunkt p = neuer Punkt (); PX = IW-TW-20; PY = IH-TH-20; // Watermark Watermark Watermark = neues Wasserzeichen (Renderedwatermarktext, p); // Wasserzeichen Transparenz Wasserzeichen.Settransparenz (1); gf = watermark.apply (GifDeCoder.decode (SRC), False); // Ausgabe gifeCoder.encode (gf, dest); } catch (ioException e) {e.printstacktrace (); }} public static void main (String [] args) {// Pfad, wobei das Bild Wasserzeichen srcimgpath = "d: /1.jpg" sein muss; String logotext = "Invalid Copy"; // Der Pfad des Bildes Watermark String iconpath = "d: /2.jpg"; // Der Ausgangspfad der Wassermark -Datei String targetTextPath = "d: /qie_text.jpg"; String targetTextPath2 = "d: /qie_text_rotate.jpg"; String targeticonpath = "d: /qie_icon.jpg"; String targeticonpath2 = "d: /qie_icon_rotate.jpg"; System.out.println ("Um dem Bild einen Wasserzeichen -Text hinzuzufügen ..."); // Das Bild Wasserzeichen Text MarkimageByText (Logotext, SrcimgPath, TargetTextPath); // Wasserzeichen -Text zum Bild hinzufügen, Wasserzeichen Textrotation -45 MarkimageByText (Logotext, SrcimgPath, TargetTextPath2, -45); System.out.println ("Wasserzeichen -Text zum Bild hinzufügen, Ende ..."); System.out.println ("Wasserzeichen -Bild zum Bild hinzufügen, Start ..."); setImageMarkoptions (0,3F, 1, 1, null, null); // Wasserzeichenbild zum Bild hinzufügen, Wasserzeichen Bildrotation -45 MarkimageByicon (IconPath, SrcimgPath, TargeticonPath2, -45); System.out.println ("Wasserzeichen zum Bild hinzufügen ..."); // Wasserzeichen im Animationsbild hinzufügen (Animationsdatei hinzufügen, Wasserzeichen hinzufügen, Ausgabedatei hinzufügen) addTextwatermarkTogif (neue Datei ("d: //10.gif"), "Invalid", neue Datei ("d: //11.gif"); AddImageWatermarkTogif (neue Datei ("d: //gif//10.gif"), "d: //gif//3.png", neue Datei ("d: //gif//4.gif")); }}Hier sind die Methoden zum Hinzufügen von Wasserzeichen zu normalen Bildern und dem Hinzufügen von Wasserzeichen zu Animationen. Wenn die Methode zum Hinzufügen von Wasserzeichen zu normalen Bildern erfolgreich hinzugefügt werden kann, wenn das Bild übertragen wird, wird das Bild statisch. Wenn die Methode zum Hinzufügen von Wasserzeichen zu Animationen übertragen wird, wird der Fehler direkt gemeldet.
Ich habe diese ausprobiert, als ich sie gemacht habe, also werde ich mir jetzt Notizen machen und sie jetzt hier aufzeichnen, und ich hoffe, sie können Brüdern in Not helfen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.