Dieser Artikel beschreibt die Java -Methode zum Hinzufügen von Bildwasserzeichen, Textwasserzeichen und Mosaiken zu Bildern. Teilen Sie es für Ihre Referenz wie folgt weiter:
Sie können eine neue Utils -Klasse in Eclipse erstellen, den folgenden Code kopieren und direkt verwenden. Die folgende Methode realisiert die Hinzufügung von einzelnen oder mehreren Wasserzeichen.
Paket com.rzxt.fyx.common.util; Import Java.awt.Alphacomposite; Import Java.awt.Color; Import Java.awt.font; import Java.awt.graphics2d; import Java.awt.image; java.io.file; import javax.imageio.imageo; import Javax.swing.imageicon;/** * Fügen Sie dem Bild ein Wasserzeichen hinzu * @Author tgy * */public class markimageUtils {/** * @param args */public static void Main (String [] Args) {{String Output = F:/Images/Bilder/". String source = "f: /images/6.jpg"; // Source Image Path String icon = "f: /images/icon2.png"; // Image Path String imaginame = "mark_image"; // Bildname String imagetype = "jpg"; // Bildtyp JPG, JPEG, PNG, GIF String text = "Watermarked"; int size = 4; // Mosaikgröße Integer Grad = NULL; // Der Drehwinkel des Wasserzeichens beträgt -45, null bedeutet nicht, String -Ergebnis = null zu drehen; // Bild Wassermarke zum Bild Ergebnis = markimageUtils.MarkimageBauer (Symbol, Quelle, Ausgabe, Bildname, Imagetype, Grad) hinzufügen; // result = markimageUtils.markimageBysingleieicon (Ikone, Quelle, Ausgabe, ImageName, Imagetype, Grad); // Textwasserzeichen zum Bild hinzufügen // result = markimageUtils.markimageByMoretext (Quelle, Ausgabe, Bildname, Imagetype, color.red, text, grad); // result = markimageUtils.markimageBysinglext (Quelle, Ausgabe, Imagetyp, Color.red, Text, Grad); // // // // // // // Mosaik Das Bild // result = result = result = MarkimageUtils.markimageBymosaic (Quelle, Ausgabe, Imagedame, Imagetyp, Größe); System.out.println (Ergebnis); }/** * Fügen Sie mehrere Bildwasserzeichen zu verschiedenen Stellen des Bildes hinzu und setzen AS: 11111) * @param Imagetype Bildtyp (z. B.: JPG) * @param Grad Der Rotationswinkel des Wasserzeichenbildes bedeutet null keine Rotation */ public static String MarkimageBauer (String -Symbol, String -Quelle, String -Ausgabe, String -Imagname, String Imagetype, Integer Grad) {Streicherergebnis = "Fehler beim Hinzufügen von Images Watermarkt"; try {file file = new Datei (Quelle); Datei ficon = New Datei (Symbol); if (! file.isfile ()) {return source + "keine Bilddatei!"; } // das Symbol in das Speicher image im Bild ic = imageio.read (ficon) laden; // Symbolhöhe int iHeight = ic.getheight (null); // Lesen Sie das Quellbild in das Speicherbild img = imageio.read (Datei); // Bildbreite int width = img.getwidth (null); // Bildhöhe inthhohe = img.getheight (null); Bufferedimage bi = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); // Erstellen Sie ein Graphics2D -Objekt mit einem angegebenen BufferedImage Graphics2D g = bi.createGraphics (); // x, die y-achse standardmäßig von 0 Koordinaten int x = 0; int y = 0; // Die Intervallhöhe der beiden Wasserzeichenbilder beträgt 1/3 des Wasserzeichenbilds int temp = iHeight/3; int space = 1; if (Höhe> = iHeight) {Space = Höhe/iHeight; if (space> = 2) {temp = y = iHeight/2; if (space == 1 || space == 0) {x = 0; y = 0; }}} else {x = 0; y = 0; } // Setzen Sie die zackige Kantenverarbeitung des Leitungssegments G.SetRenderingHint (renderingHints.key_interpolation, renderingHints.value_interpolation_bilinear); // stellen einen Bild dar und konvertieren vom Bildraum zum Benutzerraum, bevor Sie G.Drawimage (img.getscaledInstance (Breite, Höhe, Bild, Bild.Scale_Smooth), 0,0, NULL); für (int i = 0; i <space; i ++) {if (null! = Grad) {// Setzen Sie die Wasserzeichenrotation G.Rotate (Math.Toradians (Grad), (doppelte) bi.getWidth () / 2, (doppelte) bi.gethoight () / 2); } // Der Pfad des Wasserzeichenbildes ist im Allgemeinen GIF oder PNG, so dass Transparenz imageCon imgicon = new ImageCon (Icon) festgelegt werden kann; // das Bildobjekt abrufen. Bild con = imgicon.getImage (); // Transparenz, Mindestwert beträgt 0, der Maximalwert ist 1 Float Clarity = 0,6F; G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop, Clarity)); // Geben Sie die Koordinatenposition des Wasserzeichenbilds an (x, y) //g.drawimage(con, 300, 220, Null); g.drawimage (con, x, y, null); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_over)); y+= (iCHELTE+TEMP); } g.disponse (); Datei sf = new Datei (Ausgabe, ImageName+"."+Imagetype); Imageio.Write (BI, Imagetype, SF); // Speichern Sie das Bild Ergebnis = "Symbol Wasserzeichen wird hinzugefügt, nachdem das Bild abgeschlossen ist"; } catch (Ausnahme e) {e.printstacktrace (); } Rückgabeergebnis; }/** * Fügen Sie dem Bild ein einzelnes Bild Wasserzeichen hinzu und setzen Sie den Bildungswinkel des Wasserzeichens Bildung * @param Icon Watermark Bildweg (z. 11111) * @param Imagetype Bildtyp (z. B.: jpg) * @param Grad Der Rotationswinkel des Wasserzeichenbildes bedeutet null keine Rotation */ public statische String MarkimageBysingleiicon (String -Symbol, String -Quelle, String -Ausgabe, String -Imagname, String Imagetype, Integer -Grad) {Streicherergebnis = "Fehler beim Hinzufügen von Images Wassermarke"; try {file file = new Datei (Quelle); Datei ficon = New Datei (Symbol); if (! file.isfile ()) {return source + "keine Bilddatei!"; } // das Symbol in das Speicher image im Bild ic = imageio.read (ficon) laden; // Symbolhöhe int iHeight = ic.getheight (null); // Lesen Sie das Quellbild in das Speicherbild img = imageio.read (Datei); // Bildbreite int width = img.getwidth (null); // Bildhöhe inthhohe = img.getheight (null); Bufferedimage bi = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); // Erstellen Sie ein Graphics2D -Objekt mit einem angegebenen BufferedImage. Graphics2d g = bi.createGraphics (); // x, die y-achse standardmäßig von 0 Koordinaten int x = 0; int y = (Höhe/2)-(iHeight/2); // Setzen Sie die gezackte Kantenverarbeitung des Leitungssegments G.SetRenderingHint (renderingHints.key_interpolation, renderingHints.value_interpolation_bilinear); // stellen einen Bild dar und konvertieren vom Bildraum zum Benutzerraum, bevor Sie G.Drawimage (img.getscaledInstance (Breite, Höhe, Bild, Bild.Scale_Smooth), 0,0, NULL); if (null! } // Der Pfad des Wasserzeichenbildes ist im Allgemeinen GIF oder PNG, sodass die Transparenz imageCon imgicon = new ImageCon (Icon) festgelegt werden kann. // Bildobjekt abrufen. Bild con = imgicon.getImage (); // Transparenz, Mindestwert beträgt 0, der Maximalwert ist 1 Float Clarity = 0,6F; G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop, Clarity)); // Geben Sie die Koordinatenposition des Wasserzeichenbilds an (x, y) //g.drawimage(con, 300, 220, Null); g.drawimage (con, x, y, null); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_over)); g.disponse (); Datei sf = new Datei (Ausgabe, ImageName+"."+Imagetype); Imageio.Write (BI, Imagetype, SF); // Speichern Sie das Bild Ergebnis = "Symbol Wasserzeichen wird hinzugefügt, nachdem das Bild fertig ist"; } catch (Ausnahme e) {e.printstacktrace (); } Rückgabeergebnis; }/** * Fügen Sie dem Bild mehrere Textwasserzeichen hinzu und setzen Die Farbe des Wasserzeichen -Textes* @param Word Watermark Text* @param Grad Der Rotationswinkel des Wasserzeichentextes, was keine Rotation bedeutet*/ public static String markimageByMoretext (String -Quelle, String -Ausgabe, String -Imagname, String Imagetype, Farbfarbe, Stringwort, Investment -Degree) {String -Ergebnis addiert text text text teatetype "; Versuchen Sie {// Original -Bildinformationsdatei lesen. Datei = neue Datei (Quelle); if (! file.isfile ()) {Rückgabedatei + "keine Bilddatei!"; } Bild img = imageio.read (Datei); // Bildbreite int width = img.getwidth (null); // Bildhöhe inthhohe = img.getheight (null); // Textgröße int Größe = 50; // Wasserzeichen BufferedImage bi = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb) hinzufügen; Graphics2d g = bi.createGraphics (); G.Drawimage (IMG, 0, 0, Breite, Höhe, NULL); // Setzen Sie die Schriftart der Wasserzeichen -Schriftart. // Setzen Sie die Wasserzeichenfarbe gemäß dem Hintergrund des Bildes G.SetColor (Farbe); int x = width/3; int y = Größe; int space = Höhe/Größe; für (int i = 0; i <space; i ++) {// Wenn die y-Achse der letzten Koordinate höher als Höhe ist, beenden Sie direkt, wenn ((y+Größe)> Höhe) {Break; } if (null! = Grad) {// Setzen Sie die Wasserzeichenrotation G.Rotate (math.toradians (Grad), (doppelte) bi.getWidth () / 2, (doppelte) bi.getheight () / 2); } g.setfont (font); // Wasserzeichen Position G.Drawstring (Wort, x, y); y+= (2*Größe); } g.disponse (); // Bilddatei Ausgabe sf = neue Datei (Ausgabe, ImageName+"."+Imagetype); Imageio.Write (BI, Imagetype, SF); // Bild result = "Word -Wasserzeichen nach Abschluss der Bild hinzufügen"; } catch (Ausnahme e) {e.printstacktrace (); } Rückgabeergebnis; }/** * Fügen Sie dem Bild ein einzelnes Textwasserzeichen hinzu und setzen @param Farbe Die Farbe des Wasserzeichen -Textes* @Param Word Watermark Text* @param Grad Der Rotationswinkel des Wasserzeichentextes, was keine Rotation bedeutet*/ public static String markimageBysingleText (String -Quelle, String -Ausgabe, String -Imagname, String Imagetype, Farbfarbe, Stringwort, integer Grad) {Streicherergebnis = "Fehler addiert Textmarke addieren Textmarke"; Versuchen Sie {// Original -Bildinformationsdatei lesen. Datei = neue Datei (Quelle); if (! file.isfile ()) {Rückgabedatei + "keine Bilddatei!"; } Bild img = imageio.read (Datei); int width = img.getwidth (null); int height = img.getheight (null); // Wasserzeichen BufferedImage bi = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb) hinzufügen; Graphics2d g = bi.createGraphics (); G.Drawimage (IMG, 0, 0, Breite, Höhe, NULL); // Setzen Sie die Schriftart der Wasserzeichen -Schriftart Font = New Font ("宋体", font.plain, 50); // Setzen Sie die Wasserzeichenfarbe gemäß dem Hintergrund des Bildes G.SetColor (Farbe); if (null! } g.setfont (font); int x = width/3; int y = Höhe/2; // Wasserzeichen Position G.Drawstring (Wort, x, y); g.disponse (); // Bilddatei Ausgabe sf = neue Datei (Ausgabe, ImageName+"."+Imagetype); Imageio.Write (BI, Imagetype, SF); // Bild result = "Word -Wasserzeichen nach Abschluss der Bild hinzufügen"; } catch (Ausnahme e) {e.printstacktrace (); } Rückgabeergebnis; }/** * Fügen Sie dem Bild ein Mosaik hinzu * @param Quelle Original Bildweg (z. jedes Rechtecks * @return */ public static String markimageByMosaic (String -Quelle, String -Ausgabe, String -Imagname, String -Imagetype, int Größe) {String result = "Image MOSAIC -Fehler ist aufgetreten"; try {file file = new Datei (Quelle); if (! file.isfile ()) {Rückgabedatei + "keine Bilddatei!"; } BufferedImage img = imageio.read (Datei); // Lesen Sie das Bild int width = img.getwidth (null); // Original Bildbreite int height = img.getheight (null); // Original Bildhöhe BufferedImage bi = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); // Mosaik -Gittergröße ist zu groß oder zu klein, wenn (Breite <Größe || Höhe <Größe) {return "Mosaik -Gittergröße ist zu groß"; } if (Größe <= 0) {return "Die Größe des Mosaikgitters ist zu klein"; } int xcount = 0; // Zeichne die Zahl in x Richtung int yCount = 0; // Zeichne die Zahl in y -Richtung if (Breite % size == 0) {xcount = Breite /Größe; } else {xcount = width / size + 1; } if (Höhe % Size == 0) {yCount = Höhe / Größe; } else {yCount = Höhe / Größe + 1; } int x = 0; // x Koordinate int y = 0; // y Koordinate // Mosaik zeichnen (Rechtecke zeichnen und Farben füllen) Graphics2d g = bi.createGraphics (); für (int i = 0; i <xcount; i ++) {für (int j = 0; j <ycount; j ++) {// mosaische Rechteckgröße int mwidth = Größe; int mHeight = Größe; if (i == xcount-1) {// der letzte in horizontaler Richtung reicht für eine Größe mwidth = width-x nicht aus; } if (j == yCount-1) {// der letzte in vertikaler Richtung reicht nicht für eine Größe mheight = height-y; } // Der RGB -Wert der Rechteckfarbe nimmt das mittlere Pixel int Centerx = x; int centery = y; if (mwidth % 2 == 0) {CenterX += MWIDTH / 2; } else {Centrex += (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 (Farbe); G. -FillRect (X, Y, Mwidth, MHEIGHT); y = y + Größe; // Berechnen Sie die y -Koordinate des nächsten Rechtecks} y = 0; // Die y -Koordinate x = x + Größe wiederherstellen; // Berechnen Sie die X -Koordinate} g.disponse (); Datei sf = new Datei (Ausgabe, ImageName+"."+Imagetype); Imageio.Write (BI, Imagetype, SF); // das Bild result = "Mosaic Success" speichern; } catch (Ausnahme e) {e.printstacktrace (); } Rückgabeergebnis; }}Für mehr Java-bezogene Inhalte können Leser, die an dieser Website interessiert sind, die Themen "Zusammenfassung von Java Image Operation Skills", "Zusammenfassung von Java-Datum und Zeit-Betriebsfähigkeiten", "Zusammenfassung der Java-Operation DOM-Knotenkenntnisse", "Zusammenfassung der Java-Datei und des Verzeichnisbetriebs" und "Tutorials of Java Data Struktur und Algorithm", Zusammenfassung von Java-Datum und Zeit ".
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.