字体修改详细图文教程

去年十月份改论文时,用matplotlib做图,生成pdf,插入到word文档中。但是需要把整个字体都嵌入到pdf里,生成的文件很大。当时就想通过修改字体,删除不用的字来解决,这是当时看的一篇教程,讲的很详细。

目录

一、基础知识介绍
注意:770适应的TTF,必须为2左右的,不能超过2.5M的TTF,所以大家找模板的时候的注意。
首先说一点题外话,这份字体教程说了许久,一直没有拿出来,实在不好意思,在此向各位道歉。因为还没有写完,就已连载的形式慢慢发出来,前几部分为了照顾新手写得比较啰嗦,后面我会写的简洁一些。下面进入正文。
要学会修改字体,我们必须要对字体有一定的了解,我希望首先在这里很快把一些字体结构的基础知识都在这里解释一下,为了方便新手理解,我认为使用比较形象的比喻结合相关术语来说明比较好,由于我们主要使用FontCreator来修改字体,下文中的术语将以FontCreator为准。
首先,让我们把每个字体想象成一座大厦,这座大厦有他的名字等信息,我们可以通过这些信息来找到这个字体。而我们所需要显示在屏幕上的每个字符相当于就是住在这座大厦每个房间的人,这就是我们修改的主要目标了。这时你也许会想到:一个字体拥有几万个房间,我们怎么知道要找的人在哪个房间呢?
就我们接触最多的TrueType(.ttf)字体来说,它使用的的是Unicode编码,它为每种语言中的每个字符设定了统一而且唯一的二进制编码,也就是说我们大厦中的每一个房间都有一个统一而且唯一的二进制的房间号码,另外,我们还要同时保证,该房间号码所对应的人必须是正确的,否则我们找到的人就不是我们想要找的人,显示出来的字符也就不是我们想要显示的字符。“统一而且唯一”的意思就是无论哪个系统都是按照这个编码去寻找字符,并且每一个编码只可能出现一次。
这下大家应该比较清楚了吧,我们要让一个字体正常并且正确的显示,首先要保证字体结构是完整正确的,其次我们还有每个字符以及同他相对应的编码是正确的。当然这只是最基本的条件,实际上具体的情况可能复杂很多。
下图是一个完整的Unicode编码表,我们所能用到的99.9%的字符都属于其中的BMP(基本多文种平面 Basic Multilingual Plane),也就是0000-FFFF之中。

/media/note/2011/01/15/font/1.png
更进一步,在这0000-FFFF中的字符根据语言或者符号的用途分成了不同的区块(Block),同一个语种的字符以及同一种用途的符号的编码都是连在一起的。比如说基本拉丁字母(Basic Latin)就在字体的最开头,Unicode编码从0000至007F;箭头符号(Arrows)的编码则是从2190至21FF,等等。下载这个 文本文件 ,你可以看到所有区块的顺序、编码以及对应的用途或语言。
进入 Wikibooks的这个页面 ,你可以查看到每个编码所对应的字符。

二、常用软件介绍
High-Logic FontCreator Professional Edition:这应该是用的比较多的一款字体创建、修改软件,虽说不够专业,但是足够我们日常使用了。目前最新版本5.6,有汉化版,不过推荐使用英文版。

High-Logic MainType:与FontCreator是同一家公司的产品,很好用的字体管理软件,而且可以辅助我们更方便地修改字体,用到时我再详细介绍。目前最新版本2.1.1。

FontForge :Linux上的一款开源字体编辑软件,据说功能和专业的FontLab相媲美,虽然在Windows也可以运行,但是操作习惯有些不同,也不太稳定。但是在某些功能上比FontCreator方便很多,所以我将它配合FontCreator一起使用。

Unicode编码转换工具:可以将您输入的字符转换为Unicode编码,这样你就可以快速定位该字符进行修改。有两款,其中一款支持双向转换。

字体组件:这是我从各个字体中搜刮出来的,按照相应的顺序及语种或类别放在了单独的字体文件中,包含了BMP范围内我所能找到的所以字形。
11月26日更新了一下,因为查了些资料,发现有几个地方是不应存在任何符号的,另外对中文部分对照GB18030做了一些修改。如果你是用了该文件修改字体并公开发布的话,希望能署上本人名字或留下我的博客地址,谢谢。

字体编辑FontCreator5.6XX版本(以前我上传的,定位到这个帖子里)
2篇修改字体教程!喜欢DIY的看看:
http://www.motoedy.cn/viewthread.php?tid=164
http://www.motoedy.cn/viewthread...p;extra=&page=1

三、替换字体的英文字母及数字
接下来我们就正式开始字体的修改,我将采用实例的形式编写本教程,首先我们从最简单的替换数字及字母开始,我们以制作准圆NeoSans为例。其实这部分很简单,就是复制粘贴而已,只需要注意一点,就是每个字形要复制到对应的编码下,要不然就会出现显示错误。通俗的说,就是要把新的字形放对房间。
技巧
我建议每次修改字体之前,都确保字体中的字符是按Unicode编码(也就是文章开头所说的房间号)的顺序排列,这样一方面方便修改,另一方面可以大大减少修改中出现错误。在本例中,如果原字体与替换所用的字体排列顺序不一致的话,直接复制粘贴就会出现错误。具体操作方法为选择菜单栏Font - Sort Glyphs,然后选择第一项,点击OK,这个过程需要比较长的时间。

/media/note/2011/01/15/font/3-1.png
/media/note/2011/01/15/font/3-2.png
更简便的方法是使用FontForge将字体另存一遍即可,同样可以达到该目的。需注意FontForge打开字体的路径为cygdrive\盘符\目录\文件,且文件名及目录名必须为英文,保存字体使用File菜单下的Generate Fonts,而不是Save。
/media/note/2011/01/15/font/3-3.png
/media/note/2011/01/15/font/3-4.png

首先用FontCreator打开两个字体,在任意位置点击右键,选择Caption - Microsoft Mappings,这样在每个字符上面就会显示它对应的Unicode编码,方便以后的修改过程。如果你的电脑配置比较低,使用Visible,可以大幅提高软件速度。
/media/note/2011/01/15/font/3-5.png
我们常用的数字及字母就在字体最开头的Basic Latin区块中,一般的字体都会完整包含这个区块中的94个字符,也就是从“!”(0021)至“”(007E)。在NeoSans窗口中,点击第一个字符“!”,然后按住Shift键点击最后一个字符“”,选中这94个字符,你可以在状态栏上看到“94 glyphs selected”,然后选择右键菜单 - Copy(复制),或使用快捷键Ctrl+C。
/media/note/2011/01/15/font/3-6.png
切换到准圆字体窗口,用同样方法选中这部分字符,并且确认字体的该部分也是完整的94个字符,任意位置点击右键菜单Paste,或使用快捷键Ctrl+V,这样准圆中的这部分字符就替换成NeoSans的了,当然你所选择的英文包含更多符号的话,你也可以按以上方法替换,只要Unicode编码对应正确就行了。最后保存该字体。

四、少量连续符号或文字的添加
今天将介绍少量连续符号或文字的添加,该操作使用FontCreator比较方便,下面我以给方正准圆添加Nokia特殊符号为例,说明操作方法。
实际上,你可以利用以下方法,将教程(2)提供的Components.zip中的任意一个字体组件添加到您的字体中。我修改的字体基本上都是不带韩文的,如果你需要显示韩文的话,通过以下方法就可以实现了。
首先打开Nokia符号组件及准圆字体,全选所有字符(Ctrl+A),可以看到状态栏上显示总共有19个字符,同时记住这19个字符的编码是从F800至F812。然后使用Ctrl+C复制这些字符(也可以使用右键菜单或工具栏按钮)。

/media/note/2011/01/15/font/4-1.png
切换至准圆字体,找到上述19个字符应在的位置,在该字体应该就是图中所示的E864及F92C之间。在选中所处位置之后那个字符(F92C)的情况下,选择菜单Insert - Glyphs。
/media/note/2011/01/15/font/4-2.png
弹出Insert Glyphs对话框,在上面Insert后的字符框中输入要添加的字形数,下面使用默认的第三项,点击OK。这一步的意思就是在F92C这个字符之前加入19个空字形,也就是在这里加入了19个房间。
/media/note/2011/01/15/font/4-3.png
这是程序会自动选中这9个空字符,我们选择菜单Edit - Paste Special,或者按快捷键Ctrl+E。
/media/note/2011/01/15/font/4-4.png
弹出Paste Special对话框,将Glyphs Mappings及Glyphs PostScript选中,然后点击OK。
/media/note/2011/01/15/font/4-5.png
这时我们可以看到字符的添加已经成功了。有的同学经常问我,添加的字符为什么不能显示,是因为在上一步没有使用Paste Special,而只是用了普通的粘贴,普通粘贴是不会将字符编码一起粘贴过来的,相当于这些房间没有房间号,所以造成了无法显示。
/media/note/2011/01/15/font/4-6.png
最后保存该字体即可。

五、大量非连续符号或文字的添加
在本教程第二部分提供的字体组件中,有一个Components.ttf,这个字体文件包含了除中文和韩文以外其余的所有一万一千余个符号及文字,方便大家进行一次性添加,由于原字体与Components.ttf必定会有一部分重叠,我们所需要补充的字形肯定不是连在一起的。
另外,如果你要修改的字体中文部分不完整的话,为了能显示所有中文,你有可能需要使用相似的字体将中文部分补充完整,这时你需要补充的中文字符肯定也不是连续在一起的。
在以上两种情况中,我们就不能按照教程第四部分简单的进行添加了,这一部分我们就以利用Components.ttf补充准圆的符号文字为例,分别说明使用FontCreator及FontForge的操作方法。
1. 使用FontCreator进行添加
首先我们打开两个字体,将Components.ttf中的字形全选,复制。
接着,我们在准圆字体末尾添加11411个空字形,注意下面选择第二项“After last glyph”(没有选中字形的话默认为该项)。

/media/note/2011/01/15/font/5-1.png
选择菜单Edit – Paste Special,或者按快捷键Ctrl+E,弹出Paste Special对话框,同样将Glyphs Mappings选中。
由于我们复制的字形中与准圆有重复的,也就是存在相同的映射关系,所以这里注意一下对话框下面的Mappings部分,三个选项都会粘贴所有的字形,但是第一项Keep same mappings表示只建立原字体字体中不存在的映射,已存在的映射则保持不变,而第二项Overrule same mapping及第三项Add mappings表示已存在的映射也会被替换为所粘贴的映射。
注:官方的帮助文件中对第二项及第三项的说明是不同的,但我在实际使用时感觉两项所达到的效果完全一样,如果有误请指正,下面是帮助文件中的说明:
Keep same mappings adds new mappings to the glyphs. Mappings that already exist will be reassigned to the pasted glyph(s) when the Overrule same mapping option is selected. You can also choose to add mappings. Add mappings adds all mappings. When mappings are already available, they will be reassigned to the pasted glyph(s)。
/media/note/2011/01/15/font/5-2.png
在这个例子中,我们当然希望只为不存在的字形添加映射,而保留原有字形的映射,所以选择第一项Keep same mappings,然后点击OK。
稍等片刻后,我们就可以看到,对于原字体已存在的字形就没有建立映射关系,也就是没为他添加相应的编码(右键菜单的Caption需要选择为Microsoft Mappings才能看到)。
/media/note/2011/01/15/font/5-3.png
接着,我们对字体进行排序,也就是将我们后来添加的字形放到他应该所处的位置,该操作我在教程第三部分的开头已经说过了,这里不再赘述。
完成以后我们将排在字体末尾没有映射关系的字形全部删除,最后保存字体即可。

2. 使用FontForge进行添加
首先,同样打开两个字体,路径为“cygdrive\盘符\目录\文件”。
接着分别在两个字体的窗口中选择菜单Element – Font Info,弹出窗口的左边选择General,将Components.ttf的Em Size(主要是这项)、Ascent、Descent改为与准圆相同的数值,点击OK,稍等片刻等待该操作完成。

/media/note/2011/01/15/font/5-4.png
选择菜单Element – Merge Fonts,在弹出的窗口中点击OK。稍等片刻后,FontForge便会将准圆原本没有的字符补充进去,不会影响原有的字符。
/media/note/2011/01/15/font/5-5.png
最后,选择菜单File - Generate Fonts生成新的字体。

六、删除不需要的字形
说完了怎么添加字形,现在该说说说说怎么删除字形了,在这里我们利用MainType,可以很方便的删除不需要的字形,对字体进行精简。
首先打开MainType,界面中间的左部是字体列表区域,第一个选项卡Actives代表已安装的字体,每次启动时都会加载该列表下的字体,稍等一会加载完以后,点击Browse选项卡,浏览到你要修改的字体目录,选择你要修改的字体,这时你在右边就可以看到该字体所包含的所有字形,并且是按照不同的区块排列的。通过 这个文本文件 ,你可以查看到区块对应的用途或语言。

/media/note/2011/01/15/font/6-1.png
这里我们以删除阿拉伯文为例,打开字形上方的下拉菜单,找到其中的Arabic项,点击以后就会跳转到阿拉伯文的位置。
/media/note/2011/01/15/font/6-2.png
记住该区块一共有235个字形。选中第一个字形,我们可以在状态栏上看到该字符的编码为“0600”,同样方法查到该区块最后一个字形的编码为“06FF”。
/media/note/2011/01/15/font/6-3.png
回到左边的字体列表,右键点击该字体,选择Open with FontCreator。打开字体完成后,使用快捷键Ctrl+F打开搜索窗口,进入Mapping选项卡,左边选择Microsoft Unicode BMP only,在右边输入第一个字形的编码“0600”,注意前面必须有一个“$”,点击Find按钮。
/media/note/2011/01/15/font/6-4.png
这时程序会选中到“0600”这个字形,往下拖动窗口,找到“06FF”这个字形,按住Shift键点击它,这时我们应该会看到状态栏上显示选中了235个字形,接着点击键盘上的Delete键或使用右键菜单的Delete选项就可以删除选中的字形了。
最后提醒一点,删除之前应该确认字体是经过了排序的,这样能尽可能减少误删的情况,排序的操作方法请见教程(3)。

七、字形轮廓的调整
今天继续为大家带来我的字体修改教程,这次我们讲的是比较重要的一部分,修改字体的过程中也会经常用到的–对字形轮廓的具体调整,同时也包含对单个字形宽度等参数的调整。
我们打开一个字形,这里一英文大写字母“K”为例。中间黑色实心的部分就是屏幕上显示出来的字形,它的附近有几根红色的虚线来定义它的位置。水平的几根同一个字体内的每个字形都是一样的,而垂直的两根定义了该字形的宽度,同一个字体里的不同字形不一定相同。关于这些虚线的意思和作用大家可以看看下图中标注的中文。

/media/note/2011/01/15/font/7-1.png
下面我们就开始对字形轮廓进行调整。
单个字形的调整
首先,最简单的方法就是用鼠标直接拖动了,点击一下黑色部分,他的周围会出来一个方框,大家可以直接用鼠标拖动来调整,拖动四个角上的点时,调整按住Shift键还能保持宽高比不变。对于有些有包围结构或比较复杂的字形(如0等),你需要选中字形的全部轮廓(Ctrl+A或用鼠标拖出一个包括整个字形的选择框)后再进行调整,大家可以自己去体会,我就不详细说明了。
另外,如果你想对单个字形进行详细准确的调整,可以在打开该字形时,使用Transform面板(按F6打开或关闭该面板)进行。选择相应功能的标签页,设置好参数,点击“Apply”就可以马上看到效果了。有几个标签页会有如下图所示的9个单选框,这是定义进行操作的基点,意思就是保持该点不动进行调整。大家实际操作一下就知道了,不满意的话可以通过撤销重新来过。
/media/note/2011/01/15/font/7-2.png

多个字形的批量调整
进行批量调整需要用到Transformer工具,通过Tools - Glyph Transformer进入。
/media/note/2011/01/15/font/7-3.png
进入以后,我们可以看到下图中的窗口,这个窗口四个部分:其中第一个部分(图中①,下同)可以选择是对字体中全部字符进行调整,还是只对选中的字形进行调整;第二部分是所有可以进行的操作,我们常用的主要在Outlines及Metrics中;第三部分是即将进行的操作,通过双击第二部分中的操作或点击中间的箭头可以将你要进行的操作加到这里来,并且这些操作是有先后顺序的,不同的顺序可以达到不同的效果,点击右边的按钮可以调整顺序、保存/载入操作、或者删除操作;第四部分就是对③中的操作设置具体的参数,在③中选中一个操作后,下方会出现对应的设置。
/media/note/2011/01/15/font/7-4.png
有几个操作的选项中会有如下选项,定义操作的基点,我习惯选择“Corner or middle of glyph”选项,然后通过左边的九个点来定义,另外两个选项分别是以整个字形的中心或一个固定的点为基点进行操作。
/media/note/2011/01/15/font/7-5.png
需要注意的是,使用Glyph Transformer进行的调整是不能撤销的(不过你不要保存就可以了),建议你最好先通过Transform面板找好一个参数后,再使用Glyph Transformer进行批量操作。

实例
怎么使用好这个工具还需要你自己不断地摸索,我觉得很难用语言表达清楚,最后我举一个小例子,希望能起到抛砖引玉的作用,下面我说一下怎样对桌面播放时间不能完整显示的字体进行调整。
桌面播放时间用到的是数字及英文冒号,经过多次的测试得到,在数字宽度为字体Em Size的一半,冒号宽度为Em Size的四分之一时,能保证桌面播放时间的完整显示。字体的Em Size可以通过Format - Setting,在Units per em后面看到;单个字形的宽度可以右键单击该字形,选择Properties,在Advance Width后看到。

/media/note/2011/01/15/font/7-6.png
如果数字之间的间距比较大,也就是字形离两边红色虚掩的距离比较大,可以直接缩小所有字形的宽度来达到目的,首先选中所有数字,使用Glyph Transformer做如下设置(这里假设Em Size为256):
/media/note/2011/01/15/font/7-7.png
如果间距比较小或者经过上面的调整后数字超出了两旁的红色虚线,那么就需要将数字稍微改窄一些了,你可以参考厦门的设置(意思是以左边为基点在水平方向缩小20%)进行调整,具体的比例还需要你自己进行计算,你也可以结合上面的参数进行调整,达到更好的效果。
/media/note/2011/01/15/font/7-8.png
到这里我的字体教程基本上就结束了,看完这7篇文章,你应该可以独立的修改出一个适合手机显示的字体了,如果以后我还想到什么可以写的,再继续补充吧,谢谢大家对本教程的支持。
转自 http://www.yeolar.com/note/2011/01/15/font-edit/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容