java - java中文本到图像的定位

标签 java image text drawing string-formatting

我编写了一段代码,用于将 .txt 文件中的文本转换为 .jpeg 图像。但我的问题在于:我使用了drawstring函数,它使我只能访问图像中文本左下角的坐标。代码是:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.util.*;
import java.awt.font.*;
import java.awt.geom.*;

class TextToImageDemo
{

    public static void main(String[] args) throws IOException
    {
       String sampleText = "SAMPLE TEXT",s="ALPHA";
       BufferedReader br = null;
        try
            {
                br = new BufferedReader(new FileReader("E:\\Java\\file.txt"));

                while ((sampleText = br.readLine()) != null)
                   {
                        System.out.println(sampleText);
                        s=sampleText;
                   }
            }
        catch (IOException e)
            {
                e.printStackTrace();
            }
        finally
            {
                try
                    {
                        if (br != null)br.close();
                    }
                catch (IOException ex)
                    {
                        ex.printStackTrace();
                    }
            }


        String fileName = "Image";

        File newFile= new File("./" + fileName + ".jpeg");

        Font font = new Font("Stencil", Font.PLAIN, 100);

        FontRenderContext frc = new FontRenderContext(null, true, true);

        BufferedImage image = new BufferedImage(2000, 200,   BufferedImage.TYPE_INT_RGB);

        Graphics2D g = image.createGraphics();
        System.out.println(s);
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 2000, 200);
        g.setColor(Color.BLACK);
        g.setFont(font);

        g.drawString(s, 800,150);       
        g.dispose();

      try
          {
              FileOutputStream fos = new FileOutputStream("E:\\Java\\1111.jpg");
              ImageIO.write(image,"jpg",fos);
              fos.close();
          }
      catch(Exception ex)
          {
              ex.printStackTrace();
          }

    }
}

我想要的是将文本集中在 .txt 文件中(无论文本的长度是什么)。背景应固定 (2000 x 200)。并且文本应该位于中心。我如何仅使用左下坐标(由drawstring函数给出)来实现这一点?

关于文本的一些规范:它是单行文本,最大字数=30。

最佳答案

使用字体规范:

FontMetrics fm=g.getFontMetrics();
Rectangle r=new Rectangle(fm.getStringBounds(s, g).getBounds());
g.drawString(s, image.getWidth()/2-r.width/2, image.getHeight()/2-r.height/2);

关于java - java中文本到图像的定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167096/

相关文章:

java - Jersey 及附加数据进行json回复,无需修改实体类

java - 如何在 JSpinner 中禁用值的舍入

wpf - 使用 WPF 将位图复制到其他位图中

java - 创建实体标签,但它为空

java.lang.IllegalStateException : No Server ALPNProcessors - WireMock

image - Symfony 2 Assets 图片

java - 将html转换为字节数组java中的图像

python - 文本剥离问题

linux - 将简单的 emaildump 转换为 maildir 或 mbox 格式

c# - 在 C# 中,如何在不逐行搜索的情况下在大型文本文件中搜索字符串?