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
Release: 2024-11-29 22:19:12
Original
380 people have browsed it

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
    }
}
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template