zoukankan      html  css  js  c++  java
  • 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;
        }
    

      

  • 相关阅读:
    【lua实战摸索】在b.lua调用a.lua的函数
    【VScode】使用VScode 来写markdown ① 时序图
    修改虚拟机的ip地址
    PyCharm 导包提示 unresolved reference
    报错:Request failed with status code 413
    安装cuda和cudnn
    delphi 10.2报错:connot resolve unit name Forms
    运行delphi 10.2时出现的错误:Error setting debug exception hook
    已知两点坐标和半径,求圆心
    电脑蓝屏,出现BitLocker 恢复
  • 原文地址:https://www.cnblogs.com/zeopean/p/7906470.html
Copyright © 2011-2022 走看看