java - 剪出文字形状的图片

标签 java image image-processing

我需要在另一个图像中以文本的形状剪切一个图像。我认为最好用图片来展示。

这是一张猫的照片:

Photo of a nice cat

这是我要删掉的文字:

Text to cut out of the cat photo

生成的图像是这样的:

Resulting cut-out of the cat photo

文本图像将始终为黑色并具有透明背景,并且生成的剪切图也应具有透明背景。两个输入图像的大小也将相同。

最佳答案

Cat text

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 url = new URL("http://i.stack.imgur.com/Nqf3H.jpg");
        BufferedImage originalImage = ImageIO.read(url);
        final 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 xOff = 25+(int)-box.getX();
        int yOff = 80+(int)-box.getY();
        Shape shape = gv.getOutline(xOff,yOff);
        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 file = new File("cat-text.png");
        ImageIO.write(textImage,"png",file);
        Desktop.getDesktop().open(file);
    }
}

关于java - 剪出文字形状的图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295084/

相关文章:

java - java bean 中的 window.open

java - 将对象重新放入 ConcurrentHashMap 是否会导致 "happens-before"内存关系?

javascript - 使用上一个和下一个按钮在 javascript 中循环浏览图像

python - python google app engine中的断开链接图像

c++ - 检测图像中的点并进行比较

java - 在android中为TextView添加发光

java - 在 Eclipse 中使用 Tomcat 和 Maven 会抛出错误

php - 如何避免每次都加载用户的标志

matlab - bsxfun 的扩展以满足矩阵中的特定索引

python - 使用 OpenCV warpPerspective 时如何显示整个图像