忘掉MacType吧,TtfAutoHint手工删除ttc、ttf字体的hinting,微软雅黑字体更显平滑

Windows的ClearType渲染字体方式,结合臭名昭著的hinting技术使微软雅黑字体备受争议,正所谓:成也hinting,败也hinting。

首先什么是hinting?

Hinting 这个词一直都没有中文名称,我用粤语将它音译为“牵挺”。

个人解释: "牵" 可以理解为引导和调整,而 "挺" 则可以解释为挺拔、优雅。

按照官方的解释,Hinting的目的是为了确保在低分辨率屏幕上,小字号字体也能够清晰可读。然而,在追求清晰的同时,hinting可能会导致笔画的位置偏移和错位,从而损害了字体的整体设计美感。

在我看来,hinting是一种动态模拟点阵字体效果的技术

因此,微软雅黑字体在小字号下会出现各种奇怪的笔画位置不正确的现象,主要是因为hinting为了在狭小的点阵像素空间内实现清晰展示,牺牲了原本中文字体的设计意图。

相比之下,Mac OS采用的平滑渲染字体效果一直受到许多用户的喜爱,Windows用户只有眼馋的份。为了追求模拟Mac OS的平滑渲染字体效果,摆脱Windows hinting的影响,字体爱好者追捧先后出现的GDI++和MacType等外挂式字体渲染工具,使得Win系统的字体显示更加“所见即所印”。(GDI++是MacType的先驱。我是从2008年开始在WinXP系统使用GDI++,2012年后Win7系统使用MacType。)

Windows 10之后引入了DirectWrite渲染方式,但在系统缩放比例200%以下,DirectWrite仍无法完全解决微软雅黑字体显示不平滑的问题。那就继续用MacType呗……更糟糕的是,越来越多的生产力应用(如Chrome浏览器、WPS、Photoshop等)已经我行我素,强行使用Hinting渲染,完全无视MacType,导致MacType可渲染的对象越来越少,MacType的地位变得越来越不重要。

因此,干脆直接干掉字体的hinting吧!尽管这样会导致在小字号下显示比较模糊。在只要把系统的字体缩放比例设为125%以上,微软雅黑的观感将显著提升。

早在2008年坊间就有流传过“无hinting的微软雅黑”字体,字体名称为 iYahei,文件大约8M。可惜在WinXP、Win7系统默认的渲染模式下显示发虚,笔画的粗细不一,远远达不到MacType的效果。

然而我把 iYahei 存入手机代替默认字体却能完美展现。从2008年我使用的诺基亚手机,到后来的安卓系统的手机,我都替换手机的默认字体为 iYahei。除了 iYahei,也有其他人制作的无hinting字体,受多人推崇。

为什么不直接把有hinting的微软雅黑替换安卓手机的默认字体?我早已尝试过,带有hinting的微软雅黑在安卓系统里也会按照hinting信息渲染字体,跟Windows的默认渲染效果一样不好看。唯有去除hinting,才能真正再现字体设计的本色。

多年以来,我都在寻找一款能够删除hinting的工具,现在终于找到了,并将其记录如下:

需要用到的利器: TtfAutoHint (度盘链接:https://pan.baidu.com/s/1Mv-hpb7mqxzLf22Z1lDGbA?pwd=ttj5 提取码: ttj5)

另外,需要 WinPE环境(U盘或者本地硬盘安装)。

在Windows的命令提示符使用以下命令来删除hinting:

d:\downloads\ttfautohint -d c:\windows\fonts\msyh.ttc c:\msyh.ttc

微软雅黑常规体文件msyh.ttc原先体积是22.5M,经过这样去除hinting之后,生成的新字体文件大大缩小到8M,这跟多年前的 iYahei 字体差不多大了,可见微软每次升级Windows系统和微软雅黑字体,为了讨好眼球,都是制造更多的 hinting。在我看来,这些 hinting 都是垃圾,真正有效的矢量字体信息就是8M够了。

如果要批量转换Windows系统的字体,可以在命令行下可以使用下面命令:

cd /d %windir%\fonts
for %a in (*.tt?) do d:\downloads\ttfautohint -d %a c:\%a

这样就一次性把系统所有.ttc和.ttf的字体都去掉hinting,输出到C盘根目录。

在重启后切换到WinPE环境,把C盘根目录处理后的字体文件复制粘贴到C:\windows\fonts目录并替换,再重启进入正常的Windows环境,这样微软雅黑字体的渲染效果变得更加平滑。虽然与MacType的效果相比还有少许差距,但至少不再担心MacType占用系统内存的问题。

需要注意的是:

1、不是所有删掉hinting的字体都令人满意。

如:宋体(simsun.ttc),我觉得保留hinting反而比删掉的更好。

常用的英文字体(Arial、TImes New Roman、Tohama、Verdana、Calibri等)也没必要去掉hinting,反正去不去掉hinting视觉上的影响没那么明显。

2、显示器分辨率不超过1440x900,而且系统字体缩放比例是100%的话,劝你别试了。用默认的带hinting的字体反而使小字号字体显示更清楚。

附图1:去除hinting之前的微软雅黑(系统缩放比例100%)

 附图2:去除hinting之后的微软雅黑(系统缩放比例100%)

附图3:去除hinting之后的微软雅黑(系统缩放比例125%)

附图4:有无hinting的微软雅黑小五、五号、小四、四号字体的表现:

以“重量”为例,去除hinting之前,在hinting的作用下各个笔画都在有限像素的空间内尽可能清晰呈现,可以看出hinting的实质是在各个字号里模拟点阵字,但牺牲了原来字体的设计,如“重”的第一笔是撇,但hinting的作用下全部变成横线。删掉hinting之后的字虽然在小字号情况下显得模糊,但笔画是正确的,忠实还原字体设计的本来面目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/52216.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring声明式事务@Transactional的一些问题的测试及求证

1.Spring的声明式事务Transactional问题 前提:有两个方法,a方法对a表做修改操作,b方法对b表做修改操作 a方法调用b方法,然后a方法报错,伪代码如下 public void a() {//数据库修改操作CompensateLogDO compensateLogDO…

《Linux从练气到飞升》No.07 Linux第一个小程序-进度条的实现

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

尚品汇总结一:后台商品管理(面试专用)

项目模块: 后台管理模块 分类管理 平台属性管理 品牌管理 品牌与分类管理 SPU管理(销售属性) SKU管理(上下架) 商品详情 购物车 订单 支付 秒杀 登录 :账号密码、手机验证码、微信扫码 手机验…

Docker入门及安装

文章目录 1.Docker概述:1.什么是docker2.为什么使用docker3.docker优点4.docker资源网址 2.Docker安装1.卸载旧版本dorcker(非必要)2.设置Docker仓库安装docker引擎4.启动验证docker卸载docker 3.Docker底层原理1.docker的结构和基本概念2.docker为什么比虚拟机快 1.Docker概述…

【iOS安全】OpenSSH使用

安装OpenSSH 在 Cydia 中直接查找和安装 OpenSSH 使用OpenSSH http://orinchen.github.io/blog/2014/01/15/install-and-use-openssh-on-ios/ 保证PC和iPhone在同一网段下 查看iPhone的IP地址 ssh root10.168.xx.xx 口令默认是alpine 或者也可以使用XShell等集成终端

企业上云实施路线图

企业上云步骤主要分为规划、设计、实施、验证、运维五个阶段。https://articles.e-works.net.cn/cloud/article144684.htm

机器学习---概述(一)

文章目录 1.人工智能、机器学习、深度学习2.机器学习的工作流程2.1 获取数据集2.2 数据基本处理2.3 特征工程2.3.1 特征提取2.3.2 特征预处理2.3.3 特征降维 2.4 机器学习2.5 模型评估 3.机器学习的算法分类3.1 监督学习3.1.1 回归问题3.1.2 分类问题 3.2 无监督学习3.3 半监督…

【大数据】ELK最简入门案例(带你进入ELK世界)

文章目录 1. 前言2. 安装3. 启动ELK启动Elasticsearch启动Kibana启动Logstash 4. 测试ELK环境 本文通过最简单纯正的案例带你入门ELK世界。 1. 前言 ELK是Elasticsearch、Logstash、Kibana的缩写,如果对Elasticsearch、Logstash、Kibana不是很了解,可以…

SpringBoot使用@Autowired将实现类注入到List或者Map集合中

前言 最近看到RuoYi-Vue-Plus翻译功能 Translation的翻译模块配置类TranslationConfig,其中有一个注入TranslationInterface翻译接口实现类的写法让我感到很新颖,但这种写法在Spring 3.0版本以后就已经支持注入List和Map,平时都没有注意到这…

redis五种数据类型介绍

、string(字符串) 它师最基本的类型,可以理解为Memcached一模一样的类型,一个key对应一个value。 注意:一个键最大能存储 512MB。 特性:可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512…

【C++】继承的基本特性(定义,赋值转换,友元,静态成员,虚拟继承,默认成员函数,作用域)

文章目录 一、继承的定义1.定义格式2.继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承的作用域1. 在继承体系中基类和派生类都有独立的作用域。2.子类和父类中有同名成员3.成员函数的隐藏4.注意在实际中在继承体系里面最好不要定义同名的成员。 四、派生类的…

Unity Shader编辑器工具类ShaderUtil 常用函数和用法

Unity Shader编辑器工具类ShaderUtil 常用函数和用法 Unity的Shader编辑器工具类ShaderUtil提供了一系列函数,用于编译、导入和管理着色器。本文将介绍ShaderUtil类中的常用函数和用法。 编译和导入函数 CompileShader 函数签名:public static bool C…