Menggunakan Graphics2D untuk Menambah Tindanan Teks pada BufferedImage
Soalan ini berkaitan dengan tindanan teks pada BufferedImage menggunakan Graphics2D. Matlamatnya ialah untuk memaparkan imej akhir dengan teks yang ditambah.
Penerangan Masalah
Coretan kod yang disediakan cuba menindan teks pada koordinat tertentu menggunakan Graphics2D:
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; }
Walau bagaimanapun, imej output kekal tidak diubah.
Penyelesaian
1. Garis Dasar untuk Penyampaian Teks:
2. Keserasian Model Warna Imej:
Kod Disemak Menggunakan Teks Render pada Imej:
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; } }
Penggunaan:
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
Atas ialah kandungan terperinci Bagaimana untuk Menghamparkan Teks dengan betul pada BufferedImage menggunakan Graphics2D?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!