无法在java.awt.BufferdImage / Graphics2D中获得正确的文本高度
作者:互联网
我创建了一个使用给定文本呈现jpg / png的servlet.我希望文本以渲染的图像为中心.我可以得到宽度,但是我得到的高度似乎是错误的
Font myfont = new Font(Font.SANS_SERIF, Font.BOLD, 400);
BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
g.setFont(myfont);
g.setColor(Color.BLACK);
FontMetrics fm = g.getFontMetrics();
Integer textwidth = fm.stringWidth(imagetext);
Integer textheight = fm.getHeight();
FontRenderContext fr = g.getFontRenderContext();
LineMetrics lm = myfont.getLineMetrics("5", fr );
float ascent = lm.getAscent();
float descent = lm.getDescent();
float height = lm.getHeight();
g.drawString("5", ((imagewidth - textwidth) / 2) , y?);
g.dispose();
ImageIO.write(image, "png", outputstream);
这些是我得到的值:
文字宽度= 222
textheight = 504
上升= 402
下降= 87
高度= 503
有人知道如何获得“ 5”的确切高度吗?估计的高度应该在250左右
解决方法:
它仍然有点差,但距离更近(288):询问字形(实际图形表示)
GlyphVector gv = myfont.createGlyphVector(fr, "5");
Rectangle2D bounds = gv.getGlyphMetrics(0).getBounds2D();
float height = bounds.height();
其他Glyph方法(getGlyphVisualBounds,getGlyphPixelBounds等)返回相同的值.这是绘制字形时受影响像素的区域,因此您不会获得更好的值IMO
标签:graphics2d,awt,java 来源: https://codeday.me/bug/20191210/2098783.html