根據api,很容易知道使用方式以下:java
指定字符串和座標便可。
可是簡單認爲字符串的起始位置就是左上頂點就錯了,這樣畫起來每次的位置都不對,字體的大小不一樣,位置誤差很大。仔細看api註釋後發現,y座標是字符串基線位置的座標,也就是說字符串基線與畫布y重合。
字體的高由個元素組成:
ascent
descent
drawString中用的y座標是指baseline的y座標,即字體所在矩形的左上角y座標+ascent
改進後的示例代碼:
BufferedImage srcBi = xxx; int owidth = srcBi.getWidth(); int oheight = srcBi.getHeight(); Graphics2D graphics = (Graphics2D)srcBi.getGraphics(); graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics.setColor(Color.BLUE); int fontSize = 50; Font font = new Font("楷體",Font.BOLD,fontSize); graphics.setFont(font); FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font); //畫字符串,x座標即字符串左邊位置,y座標是指baseline的y座標,即字體所在矩形的左上角y座標+ascent graphics.drawString(DateUtil.formatDate(new java.util.Date(),DateUtil.FULL_TRADITION_PATTERN),10,10+metrics.getAscent()); //基線對齊改成頂邊對齊 String centerWords = "居中文字"; int strWidth = metrics.stringWidth(centerWords); int strHeight = metrics.getHeight(); int left = (owidth-strWidth)/2; //左邊位置 int top = (oheight-strHeight)/2+metrics.getAscent(); //頂邊位置+上升距離(本來字體基線位置對準畫布的y座標致使字體偏上ascent距離,加上ascent後下移恰好頂邊吻合) graphics.drawString(centerWords,left,top);
效果圖api