Java 非英文字体的字体宽度

Java 非英文字体的字体宽度,java,utf-8,fonts,awt,font-size,Java,Utf 8,Fonts,Awt,Font Size,我试图在纯白色背景上绘制印地语字符,并将生成的图像存储为jpeg。我需要动态调整图像大小,使其适合文本。目前,图像高度是固定的,假设大小为35像素(字体大小已设置为22)。如何确定图像宽度 到目前为止,我已经尝试将图像宽度设置为35像素乘以不同文本行的最大长度。这还不起作用,保存的图像非常广泛。我正在使用Java中图形类的drawString方法 创建图像的函数: public static void printImages_temp(List<String> list) {

我试图在纯白色背景上绘制印地语字符,并将生成的图像存储为
jpeg
。我需要动态调整图像大小,使其适合文本。目前,图像高度是固定的,假设大小为35像素(字体大小已设置为22)。如何确定图像宽度

到目前为止,我已经尝试将图像宽度设置为35像素乘以不同文本行的最大长度。这还不起作用,保存的图像非常广泛。我正在使用Java中图形类的
drawString
方法

创建图像的函数:

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);
    }
publicstaticvoidprintimages\u temp(列表){
/*用于将列表中包含的翻译打印到图像的函数。
*步骤:
*1.拍摄纯白色图像。
*2.在上面写上英语单词。
*3.将每一份译文打印到每一行。
*/
字符串dest=tgtDir+“\\”+list.get(0)+“.jpg”;//目标文件映像。
int imgWidth_max=410;
int imgHeight_max=230;
int fontSize=22;
Font f=新字体(“衬线”,Font.BOLD,fontSize);
//计算图像的高度和宽度。
int img_height=list.size()*35+20;
int img_width=0;
int max_length=0;
对于(int i=0;i最大长度){
max_length=list.get(i).length();
}
}
img_宽度=最大长度*20;
System.out.println(“图像的新尺寸=“+img\u宽度+”“+img\u高度”);
BuffereImage img=新的BuffereImage(img_宽度、img_高度、BuffereImage.TYPE_INT_RGB);
Graphics g=img.getGraphics();
g、 setColor(Color.WHITE);
g、 fillRect(0,0,img_宽度,img_高度);
//图像必须写入另一个文件。
对于(int i=0;i
我的问题是:

  • 如果用于呈现文本的字体是通用的,如何获取非拉丁类型字符的宽度
  • 有没有办法获得适用于所有UTF-8字符的宽度
    为了更快地获得更好的帮助,请发布一个。这似乎是一个有趣的问题,我想尝试一些可能性,看看我能想到的任何东西是否适合这个用例。Andrew,我添加了创建图像的功能。如您所见,图像的高度和宽度是基于一个不太便于携带的尺度设置的。我需要一个方法,可以告诉我的高度和宽度,每一行将占用,以便我可以适当的大小图像。代码应该能够跨语言移植。“我添加了创建图像的函数”我让你发布一个SSCCE,而不是一个方法。请阅读链接。