Home >Java >javaTutorial >How to Correctly Overlay Text on a BufferedImage Using Graphics2D?

How to Correctly Overlay Text on a BufferedImage Using Graphics2D?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 22:19:12382browse

How to Correctly Overlay Text on a BufferedImage Using Graphics2D?

Overlaying Text on a BufferedImage Using Graphics2D

When attempting to overlay text onto a BufferedImage using Graphics2D, it is important to understand the correct usage of the 'drawString()' method. The x and y coordinates provided for this method represent the baseline for the leftmost character of the text, rather than the top-left corner of the text.

Problem:

If the text contains no descending characters (such as 'p' or 'g'), and is rendered at a position of (0,0), it will appear rendered outside of the image. This is because there is no room for the characters to be displayed within the given space.

Solution:

To ensure that the text is rendered within the image, it is recommended to render the image and modify it directly instead.

Code Example:

Consider the following code example, which renders an image with the text "Hello, world!" overlaid on it:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;

public class TextOverlay {

    public static void main(String[] args) throws IOException {
        // Read the image from a URL
        BufferedImage image = ImageIO.read(new URL("image-url"));

        // Create a new image to draw on
        BufferedImage newImage = new BufferedImage(
                image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);

        // Get the graphics context for the new image
        Graphics2D g = newImage.createGraphics();

        // Draw the original image onto the new image
        g.drawImage(image, 0, 0, null);

        // Set the font and color for the text
        g.setFont(new Font("Serif", Font.BOLD, 20));
        g.setColor(Color.red);

        // Calculate the position of the text
        int x = image.getWidth() - g.getFontMetrics().stringWidth("Hello, world!") - 5;
        int y = g.getFontMetrics().getHeight();

        // Draw the text onto the new image
        g.drawString("Hello, world!", x, y);

        // Dispose of the graphics context
        g.dispose();

        // Save or display the new image
    }
}

By modifying the image after it has been rendered, it is possible to ensure that the text is overlayed correctly within the image itself.

The above is the detailed content of How to Correctly Overlay Text on a BufferedImage Using Graphics2D?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn