2016-05-11 9 views
0

.txtファイルのテキストを.jpeg画像に変換するコードを記述しました。しかし私の問題はここにあります:私はひも機能を使用して、画像のテキストの左下隅の座標のみにアクセスできます。コードは次のとおりです。javaの画像へのテキストの配置

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の1行のテキストです。

答えて

1

使用フォントメトリックス:

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); 
+0

+は、高さ場合は、よりよい解決策はなく、マイナスです。 – Qwerty