2

画像に文字列を書き込もうとしているので、テキストをコピーして翻訳者に通すのは難しいです。

私のコードは正常に機能しますが、常に非常に長い画像が表示されます。文字列が書き込まれる場所に、より読みやすいボックスが必要です。私のメソッド「StringDiver」は「\n」を追加しますが、画像に文字列を書き込む場合は役に立ちません。

今、私はこの出力を取得します。

私に何ができるかヒントはありますか?

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


public class writeToImage {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    String newString = "Mein Eindruck ist, dass die politische und öffentliche Meinung in Deutschland anfängt, die wirtschaftliche Zerstörung im Inland und in Europa zu erkennen, die auf einen eventuellen Zusammenbruch des Euro folgen würde.";
    String sampleText = StringDivider(newString);

    //Image file name
   String fileName = "Image";

    //create a File Object
    File newFile = new File("./" + fileName + ".jpg");

    //create the font you wish to use
    Font font = new Font("Tahoma", Font.PLAIN, 15);

    //create the FontRenderContext object which helps us to measure the text
    FontRenderContext frc = new FontRenderContext(null, true, true);

    //get the height and width of the text
    Rectangle2D bounds = font.getStringBounds(sampleText, frc);
    int w = (int) bounds.getWidth();
    int h = (int) bounds.getHeight();

    //create a BufferedImage object
   BufferedImage image = new BufferedImage(w, h,   BufferedImage.TYPE_INT_RGB);

    //calling createGraphics() to get the Graphics2D
    Graphics2D g = image.createGraphics();

    //set color and other parameters
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, w, h);
    g.setColor(Color.BLACK);
    g.setFont(font);

   g.drawString(sampleText, (float) bounds.getX(), (float) -bounds.getY());

  //releasing resources
  g.dispose();

    //creating the file
   try {
    ImageIO.write(image, "jpg", newFile);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
 }

public static String StringDivider(String s){

    StringBuilder sb = new StringBuilder(s);

    int i = 0;
    while ((i = sb.indexOf(" ", i + 30)) != -1) {
        sb.replace(i, i + 1, "\n");
    }

    return sb.toString();



}
}
4

2 に答える 2

2
g.drawString(sampleText, (float) bounds.getX(), (float) -bounds.getY());

テキストを分割し、すべての部分を画像に書き込みます。

Rectangle2D bounds = font.getStringBounds(sampleText, frc);
int w = (int) bounds.getWidth();
int h = (int) bounds.getHeight();

String[] parts = sampleText.split("\n");
//create a BufferedImage object
BufferedImage image = new BufferedImage(w, h * parts.length,   BufferedImage.TYPE_INT_RGB);

int index = 0;  
for(String part : parts){
    g.drawString(part, 0,  h * index++);
}

元:

first part:  x=0 ; y=0
second part: x=0 ; y=5
third part:  x=0 ; y=10;

heightText = h

于 2012-08-10T11:05:59.773 に答える
0

LineBreakMeasurerを見てください。Javadocの最初のコード例は、まさにあなたが探しているものです。

于 2012-08-10T12:19:58.570 に答える