無地の白い背景にヒンディー語の文字を描画し、結果の画像をjpeg
. テキストに収まるように、画像のサイズを動的に調整する必要があります。現在、画像の高さは 35 ピクセルのサイズを想定して固定されています (フォント サイズは 22 に設定されています)。画像の幅を固定するにはどうすればよいですか?
これまでのところ、画像の幅をさまざまなテキスト行の最大長の 35 ピクセル倍に設定しようとしました。それは機能せず、保存された画像は非常に広いです。drawString
Javaでグラフィックスクラスのメソッドを 使用しています。
画像を作成する関数:
public static void printImages_temp(List<String> list) {
/* Function to print translations contained in list to images.
* Steps:
* 1. Take plain white image.
* 2. Write English word on top.
* 3. Take each translation and print one to each line.
*/
String dest = tgtDir + "\\" + list.get(0) + ".jpg"; //destination file image.
int imgWidth_max = 410;
int imgHeight_max = 230;
int fontSize = 22;
Font f = new Font("SERIF", Font.BOLD, fontSize);
//compute height and width of image.
int img_height = list.size() * 35 + 20;
int img_width = 0;
int max_length = 0;
for(int i = 0; i < list.size(); i++) {
if(list.get(i).length() > max_length) {
max_length = list.get(i).length();
}
}
img_width = max_length * 20;
System.out.println("New dimensions of image = " + img_width + " " + img_height);
BufferedImage img = new BufferedImage(img_width, img_height, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, img_width, img_height);
//image has to be written to another file.
for(int i = 0; i < list.size(); i++) {
g.setColor(Color.BLACK);
g.setFont(f);
g.drawString(list.get(i), 10, (i + 1) * 35);
}
//g.drawString(translation, 10, fontWidth); //a 22pt font is approx. 35 pixels long.
g.dispose();
try {
ImageIO.write(img, "jpeg", new File(dest));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("File written successfully to " + dest);
}
私の質問:
- テキストのレンダリングに使用されるフォントが一般的である場合、ラテン語以外のタイプの文字の幅を取得するにはどうすればよいですか?
- すべての UTF-8 文字に適用される幅を取得する方法はありますか?