java 文本圖片字體模糊優化處理

昨天發現雖然圖片生成字體夠清楚了,可是會出現少許鋸齒,因此調整了下,代碼以下: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;
    }
相關文章
相關標籤/搜索