Maison >Java >javaDidacticiel >Comment découper une image en forme de texte à l'aide de Java ?

Comment découper une image en forme de texte à l'aide de Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 12:05:17185parcourir

How to Cut an Image into the Shape of Text Using Java?

Découper une image en forme de texte

Problème : Étant donné deux images, l'une contenant du texte et l'autre contenant une image, créez une découpe de l'image en forme de texte.

Exigences :

  • Le texte doit être noir avec un arrière-plan transparent.
  • L'image de sortie doit également avoir un arrière-plan transparent.
  • Les deux images d'entrée doivent avoir la même size.

Solution :

Pour obtenir cet effet, nous pouvons utiliser la bibliothèque Java AWT. Voici un extrait de code qui montre comment :

import java.awt.*;
import java.awt.font.*;
import java.awt.image.BufferedImage;
import java.awt.geom.Rectangle2D;
import javax.imageio.ImageIO;
import java.net.URL;
import java.io.File;

class PictureText {

    public static void main(String[] args) throws Exception {
        URL imageUrl = new URL("https://i.sstatic.net/Nqf3H.jpg");
        BufferedImage originalImage = ImageIO.read(imageUrl);
        BufferedImage textImage = new BufferedImage(
            originalImage.getWidth(),
            originalImage.getHeight(),
            BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = textImage.createGraphics();
        FontRenderContext frc = g.getFontRenderContext();
        Font font = new Font(Font.SANS_SERIF, Font.BOLD, 250);
        GlyphVector gv = font.createGlyphVector(frc, "Cat");
        Rectangle2D box = gv.getVisualBounds();
        int xOffset = 25 + (int)-box.getX();
        int yOffset = 80 + (int)-box.getY();
        Shape shape = gv.getOutline(xOffset, yOffset);
        g.setClip(shape);
        g.drawImage(originalImage, 0, 0, null);
        g.setClip(null);
        g.setStroke(new BasicStroke(2f));
        g.setColor(Color.BLACK);
        g.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        g.draw(shape);

        g.dispose();

        File outputFile = new File("cat-text.png");
        ImageIO.write(textImage, "png", outputFile);
        Desktop.getDesktop().open(outputFile);
    }
}

Dans ce code :

  1. Nous chargeons les deux images dans des objets BufferedImage (originalImage et textImage).
  2. Nous créons un contexte graphique pour que textImage puisse dessiner dessus.
  3. Nous créons un vecteur glyphe à partir du texte fourni et déterminons son visuel limites.
  4. Nous définissons la forme du clip du contexte graphique sur le contour du vecteur glyphe, masquant ainsi le reste de l'image.
  5. Nous dessinons l'image originale sur l'image texte, découpée au forme du texte.
  6. On enlève le masque de clip et on dessine le contour du texte en noir.
  7. Enfin, on écrit le texteImage dans un fichier et ouvrez-le dans la visionneuse d'images par défaut.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn