Der Hauptzweck des Hinzufügens von Wasserzeichen zu Bildern besteht darin, das Urheberrecht des Bildes zu schützen, um zu verhindern, dass Unbefugte das Bild verwenden oder verbreiten. Das Hinzufügen von Wasserzeichen zu Bildern ist eine gängige Bildverarbeitungstechnik. Sie können die Graphics2D-Klasse verwenden, die im Java JDK enthalten ist, um Wasserzeichen zu zeichnen. Sie können Bildwasserzeichen oder Textwasserzeichen hinzufügen.
Die Java-Plattform bietet eine Java 2D-API-Klassenbibliothek zur Implementierung der 2D-Bildzeichnung. Die Software unterstützt mehrere Bild-, Schriftarten- und Farbverwaltungsformate und verfügt über viele erweiterte Funktionen wie Alpha-Blending, Tiefenpuffer und mehr.
Verwenden Sie die Graphics2D-Klasse, um ein Objekt zum Zeichnen von Grafiken zu erstellen. Weitere Zeichenfunktionen können durch Erweitern des Graphics2D-Objekts, einer Unterklasse der Graphics-Klasse, erreicht werden.
// 创建一个大小为 800x600 像素的空白图像 BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB); // 递给 Graphics2D 对象以进行绘制操作 Graphics2D g2d = image.createGraphics();
Die Java 2D-API unterstützt das Zeichnen verschiedener grundlegender 2D-Grafiken wie Liniensegmente, Rechtecke, Ellipsen, Bögen usw.
// 绘制一条线段 g2d.drawLine(100, 100, 200, 200); // 绘制一个矩形 g2d.drawRect(300, 100, 100, 50); // 绘制一个椭圆 g2d.drawOval(500, 100, 100, 150); // 绘制一个弧形 g2d.drawArc(100, 300, 100, 100, 0, 90);
Sie können die verwenden Graphics2D-Objekt drawString()-Methode zum Zeichnen von Zeichenfolgentext auf dem Bild
// 将字符串 "Hello, Java 2D!" 绘制在坐标 (200, 400) 处 g2d.drawString("Hello, Java 2D!", 200, 400);
Unterstützt das Laden und Zeichnen von Bildern in verschiedenen Formaten wie JPEG, PNG, GIF usw. Sie können die ImageIO-Klasse auch verwenden, um eine Bilddatei zu laden und sie mit der Methode drawImage() des Graphics2D-Objekts auf das Bild zu zeichnen.
// 从指定的文件路径加载一张图片,并将其绘制在图像的左上角 BufferedImage image = ImageIO.read(new File("image.jpg")); g2d.drawImage(image, 0, 0, null);
Mit der Set-Methode des Graphics2D-Objekts können Sie verschiedene Zeichnungseigenschaften wie Farbe, Schriftart, Linienbreite usw. festlegen.
// 设置绘制颜色为红色 g2d.setColor(Color.RED); // 设置字体为 Arial,大小为 24 g2d.setFont(new Font("Arial", Font.PLAIN, 24)); // 设置线宽为 3 像素 g2d.setStroke(new BasicStroke(3));
Textwasserzeichen zum Bild hinzufügen Die Schritte sind wie folgt:
Verwenden Sie die ImageIO-Klasse, um das Bild zu laden, das mit einem Wasserzeichen versehen werden soll
Erstellen Sie ein benutzerdefiniertes Bildobjekt von BufferedImage und verwenden Sie das Graphics2D-Objekt. Zeichnen Sie das Originalbild auf das Objekt.
Erstellen Sie ein Schriftartobjekt und legen Sie Schriftart, Farbe, Transparenz und andere Eigenschaften fest.
Verwenden Sie die Methode drawString() des Graphics2D-Objekts, um die Zeichenfolge zu zeichnen, wo Das Wasserzeichen muss hinzugefügt werden.
Verwenden Sie die ImageIO-Klasse, um das geänderte Bild im angegebenen Verzeichnis zu speichern.
public static void addWatermark(File input, File out, String text, int fontSize) { // 读取原图片 BufferedImage image = null; try { image = ImageIO.read(input); } catch (IOException e) { e.printStackTrace(); } // 获取图片的宽度和高度 int width = image.getWidth(); int height = image.getHeight(); // 创建一个图片缓存对象 BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图片的画笔 Graphics2D g = newImage.createGraphics(); // 将原图片绘制到缓存图片上 g.drawImage(image, 0, 0, width, height, null); // 创建字体对象 Font font = new Font("微软雅黑", Font.BOLD, fontSize); // 创建字体渲染上下文 FontRenderContext frc = new FontRenderContext(null, true, true); // 计算字符串的宽度和高度 Rectangle2D bounds = font.getStringBounds(text, frc); // 字符宽度 int strWidth = (int) bounds.getWidth(); // 字符高度 int strHeight = (int) bounds.getHeight(); // 设置水印的字体样式 g.setFont(font); // 设置水印的颜色 g.setColor(Color.red); // 设置水印的位置 根据需要再自行调整宽度、高度 g.drawString(text, width - strWidth - 10, height - strHeight + 15); // 释放图形上下文使用的系统资源 g.dispose(); // 保存带水印的图片 try { ImageIO.write(newImage, "png", out); } catch (IOException e) { e.printStackTrace(); } }
public static void main(String[] args) { File input = new File("D://test.png"); File out = new File("D://watermark.png"); // 水印文本内容,中文转Unicode String text = "\u6dfb\u52a0\u6c34\u5370"; addWatermark(input, out, text, 20); }
public static void addWatermark(File input, File out, File watermarkImage) { // 读取添加水印的图片 BufferedImage image = null; try { image = ImageIO.read(input); } catch (IOException e) { e.printStackTrace(); } // 获取图片的宽度和高度 int width = image.getWidth(); int height = image.getHeight(); // 创建一个图片缓存对象 BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图片的画笔 Graphics2D g = newImage.createGraphics(); // 将原图片绘制到缓存图片上 g.drawImage(image, 0, 0, width, height, null); // 读取水印图片 BufferedImage watermark = null; try { watermark = ImageIO.read(watermarkImage); } catch (IOException e) { e.printStackTrace(); } // 获取水印图片的宽度和高度 int wmWidth = watermark.getWidth(); int wmHeight = watermark.getHeight(); // 设置水印图片的透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f)); // 绘制水印图片 g.drawImage(watermark, width - wmWidth - 10, height - wmHeight - 10, wmWidth, wmHeight, null); // 释放图形上下文使用的系统资源 g.dispose(); // 保存带水印的图片 try { ImageIO.write(newImage, "png", out); } catch (IOException e) { e.printStackTrace(); } }
public static void main(String[] args) { File input = new File("D://test.png"); File out = new File("D://watermark.png"); File watermarkImage = new File("D://watermarkImage .png"); addWatermark(input, out, watermarkImage); }
Das obige ist der detaillierte Inhalt vonSo fügen Sie Textwasserzeichen und Bildwasserzeichenfunktionen in Java hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!