昨天發現雖然圖片生成字體夠清楚了,可是會出現少許鋸齒,因此調整了下,代碼以下:java
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-- 如下爲舊的字體
今天遇到一個很糾結的問題,就是用java 生成的圖片字體非常模糊,一開始覺得是字體的問題,換了不少字體,例如蘋方,思源黑體,這些平時用到的開源字體,不管咋處理,都沒效果。spa
後面老大看了下,以爲是個人畫布又問題,因而添加了一個參數,實例以下:blog
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); 圖片
而後就ok了,具體代碼以下get
/** * 計算文本高度 * * @param content 文本內容 * @param font 文本字體 * @param width 文本的行寬 * @param lineHeight 文本行高 */ public static ContentImgInfo effectiveHeight(String content, Font font, int width, int lineHeight) { int imgHeight = 0; ContentImgInfo contentImgInfo = new ContentImgInfo(); try { BufferedImage image = new BufferedImage(100, 300, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setFont(font); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); FontMetrics fm = g.getFontMetrics(font); // 獲取字體高度 int fontHeight = fm.getHeight() + lineHeight; // 添加對文字的換行處理 char firstChar = "中文".charAt(0); int charWidth = fm.charWidth(firstChar); // 字符的寬度 int num = (int) Math.ceil(width / charWidth); int lineNum = EffHelper.ceil(content.length(), num) + 1; imgHeight = lineNum * fontHeight; g.dispose(); // 設置文本圖片信息 contentImgInfo.setFontHeight(fontHeight); contentImgInfo.setContentImgHeight(imgHeight); contentImgInfo.setLineNum(lineNum); } catch (Exception e) { } return contentImgInfo; }