Rumah > Java > javaTutorial > Bagaimana untuk Menghamparkan Teks dengan betul pada BufferedImage menggunakan Graphics2D?

Bagaimana untuk Menghamparkan Teks dengan betul pada BufferedImage menggunakan Graphics2D?

DDD
Lepaskan: 2024-12-21 12:49:09
asal
997 orang telah melayarinya

How to Correctly Overlay Text onto a BufferedImage using Graphics2D?

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;
}
Salin selepas log masuk

Walau bagaimanapun, imej output kekal tidak diubah.

Penyelesaian

1. Garis Dasar untuk Penyampaian Teks:

  • Kaedah drawString() dalam Graphics2D mentafsir koordinat yang ditentukan sebagai garis dasar untuk aksara paling kiri. Ini menunjukkan bahawa teks mungkin dipaparkan di luar imej jika ia mengandungi aksara yang memanjang di bawah garis dasar, seperti turunan dalam huruf kecil atau nombor.

2. Keserasian Model Warna Imej:

  • Model warna imej mesti serasi dengan teks tindanan. Kod yang disediakan cuba mengubah suai imej secara langsung, yang boleh menyebabkan hasil yang tidak dijangka jika imej mempunyai model warna yang tidak serasi.

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;
    }
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan