CFF Engine其实一直存在于Freetype的源码中的,只不过是Freetype开发团队实现的。最近突然火起来了的原因是Adobe将其CFF Engine的源码合并了进去,这使得Freetype处理cff或者otf的效果会更加好。毕竟这个加入了Adobe的心血。
Freetype CFF典型版本:2.5.2,从这个版本正式加入了Adobe CFF Engine.
2.5.2以上版本的Freetype编译时默认使能了Adobe,应用程序的使用,这里有FreeType-2.5.2 API Reference The CFF driver教程。
Freetype教程:http://www.freetype.org/freetype2/docs/tutorial/step1.html
Freetype CFF应用程序教程:http://lists.nongnu.org/archive/html/freetype-devel/2013-05/msg00000.html
Freetype CFF编译教程:
Freetype LWM上的讨论:Adobe CFF rasterizer contributed to FreeType
下面是我实验的过程,1.编译2.5.2版本的Freetype。2.在原有测试程序中添加Adobe CFF Engine.
1.编译2.5.2版本的Freetype.
$ cd ~/Downloads
$ wget http://download.savannah.gnu.org/releases/freetype/freetype-2.5.2.tar.gz
$ tar zxvf freetype-2.5.2.tar.gz
$ cd freetype-2.5.2/
$ ./configure
$ make
$ sudo make install
2.编译运行测试程序
结合https://github.com/acarrico/ex-sdl-freetype-harfbuzz/blob/master/ex-sdl-freetype-harfbuzz.c和思源字体。
基于以上例子,添加如下内容:
#include FT_CFF_DRIVER_H
#include FT_MODULE_H
.....
int engine = FT_CFF_HINTING_ADOBE;
assert(!FT_Property_Set( ft_library, "cff", "hinting-engine", &engine ));
两样是如下的图,可以看出并没有明显的效果。如何才能直观地看到效果呢?目前来说还显示有些困难,只有在极端条件下才能有明显的效果吧,比如DPI只有85的LCD上。但是这也是一个漫长的过程。能够显示了,再更新。
其它问题:
1. /usr/bin/install cannot stat `./builds/unix/freetype-config'
编译时遇到如上错误,是因为我使用了autoconfig而不是configuration造成的。
2.undefined symbol: FT_Property_Set
运行程序的时候遇到的错误,编译可以过,运行不可以,说明编译和运行使用的不是同一个库。通过readelf -s /usr/local/lib/libfreetype.so | grep FT_P可以找到,但是在gcc中那个确实是找不到符号。如下操作解决:
sudo cp /usr/local/lib/libfreetype.so.6.11.1 /usr/lib/i386-linux-gnu/
sudo rm /usr/lib/i386-linux-gnu/libfreetype.so
sudo ln /usr/lib/i386-linux-gnu/libfreetype.so.6.11.1 /usr/lib/i386-linux-gnu/libfreetype.so
sudo ldconfig