昨天發現雖然圖片生成字體夠清楚了,但是會出現少量鋸齒,所以調整了下,代碼如下:
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-- 以下為舊的
今天遇到一個很糾結的問題,就是用java 生成的圖片字體很是模糊,一開始以為是字體的問題,換了很多字體,例如蘋方,思源黑體,這些平時用到的開源字體,無論咋處理,都沒效果。
后面老大看了下,覺得是我的畫布又問題,於是添加了一個參數,實例如下:
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
然后就ok了,具體代碼如下
/**
* 計算文本高度
*
* @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;
}
