昨天发现虽然图片生成字体够清楚了,但是会出现少量锯齿,所以调整了下,代码如下:
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; }