java 文本图片字体模糊优化处理

昨天发现虽然图片生成字体够清楚了,但是会出现少量锯齿,所以调整了下,代码如下:

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;
    }

  

原文地址:https://www.cnblogs.com/zeopean/p/7906470.html