Verwenden von Graphics2D zum Hinzufügen von Textüberlagerungen zu einem BufferedImage
Diese Frage bezieht sich auf die Überlagerung von Text auf einem BufferedImage mithilfe von Graphics2D. Ziel ist es, das endgültige Bild mit dem hinzugefügten Text zu rendern.
Problembeschreibung
Das bereitgestellte Code-Snippet versucht, Text an bestimmten Koordinaten mit Graphics2D zu überlagern:
protected BufferedImage Process2(BufferedImage image){ Graphics2D gO = image.createGraphics(); gO.setColor(Color.red); gO.setFont(new Font( "SansSerif", Font.BOLD, 12 )); gO.drawString(this.text, this.x, this.y); System.err.println(this.text+this.x+this.y); return image; }
Das Ausgabebild bleibt jedoch erhalten unverändert.
Lösung
1. Basislinie für die Textwiedergabe:
2. Kompatibilität des Bildfarbmodells:
Überarbeiteter Code unter Verwendung von gerendertem Text auf dem Bild:
import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class TextOverlay { public static BufferedImage process(BufferedImage image, String text, int x, int y) { int w = image.getWidth(); int h = image.getHeight(); BufferedImage processed = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); // Create Graphics2D object for the processed image Graphics2D g2 = processed.createGraphics(); // Transfer the contents of the original image to the processed image g2.drawImage(image, 0, 0, w, h, null); // Set the text color and font g2.setColor(Color.red); Font font = new Font("SansSerif", Font.BOLD, 12); g2.setFont(font); // Get the font metrics to determine the bounding box for the text FontMetrics fm = g2.getFontMetrics(font); int textWidth = fm.stringWidth(text); int textHeight = fm.getAscent() - fm.getDescent(); // Calculate the coordinates for the text so that it is centered at the specified location int textX = x - textWidth / 2; int textY = y + textHeight / 2; // Draw the text on the processed image g2.drawString(text, textX, textY); // Dispose of the Graphics2D object g2.dispose(); return processed; } }
Verwendung:
BufferedImage image = ... // Load your original image String text = "Hello, world!"; int x = 100; int y = 100; BufferedImage processedImage = TextOverlay.process(image, text, x, y); // Use the processed image as needed
Das obige ist der detaillierte Inhalt vonWie kann ich mit Graphics2D Text korrekt auf ein BufferedImage überlagern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!