cvs -d :pserver:[email protected]:/cvs/cairo co cairo
cd cairo
wget http://www.magiclinux.org/people/sunmoon1997/patches/cairo/cairo-font-fixes-all-in-one.diff
patch -p 0 < cairo-font-fixes-all-in-one.diff
./autogen.sh --prefix=/usr/&& make && sudo make install
sunmoon1997, good,good,打两个补丁就OK了,谢谢sunmoon1997, 两个补丁:
http://www.magiclinux.org/people/sunmoon1997/patches/cairo/cairo-font-fixes-all-in-one.diff
http://www.magiclinux.org/people/sunmoon1997/patches/libXft/libXft-2.1.7-lazy-embolden.diff
都是sunmoon1997[代号‘日月’]的作品。
修改后的贴图,左边为cario驱动下的liferea,右边为deerparks beta2(firefox升级版,与IE兼容性更好)用的libXft2,分别对应上面两个补丁。 另外今天发现,有个不给cairo打补丁的方法,也能实现cairo的漂亮的新宋粗体字。
在freetype 2.1.10中打一下几个补丁:
freetype-2.1.10-enable_bytecode.patch
freetype-2.1.10-cvsfixes.patch.bz2
freetype-2.1.10-xorgfix.patch.bz2
这几个应该是mdk中补丁。应该是freetype-2.1.10-cvsfixes.patch.bz2中对freetype
的内嵌粗体做了处理。但libXft还是要打上面的补丁才好看。 Mandriva中可不敢开启bytecode。况且,要让cairo出粗体,cairo本身不需要补丁。 另外今天发现,有个不给cairo打补丁的方法,也能实现cairo的漂亮的新宋粗体字。
在freetype 2.1.10中打一下几个补丁:
freetype-2.1.10-enable_bytecode.patch
freetype-2.1.10-cvsfixes.patch.bz2
freetype-2.1.10-xorgfix.patch.bz2
这几个应该是mdk中补丁。应该是freetype-2.1.10-cvsfixes.patch.bz2中对freetype
的内嵌粗体做了处理。但libXft还是要打上面的补丁才好看。
试试这个程序。
wj@ubuntu-wj:~/download$ gcc -I/usr/include -I/usr/include/cairo -I/usr/include/freetype2 -L/usr/lib -lfreetype -lcairo cairo-text-hinting-embolden.c -o cairo-test
wj@ubuntu-wj:~/download$ ./cairo-test
下面是输出的图片!不知道有什么问题??
wj@ubuntu-wj:~/download$ ls -l /usr/lib/libcairo.so.2
lrwxrwxrwx1 root root 17 2005-11-06 01:47 /usr/lib/libcairo.so.2 -> libcairo.so.2.3.0
不好意思 :lol::lol: ,犯了个低级错误,还是用的日月兄的补丁的那个。。 日月的上面两个补丁,利用原理是先从freetype库调用取出矢量字体的画字位图,
用该位图构建一个点阵字体,然后再传入freetype,调用FT_GlyphSlot_Embolden
函数加粗字体,他利用了freetype的伪粗体的一个特性,即矢量字和点阵字伪粗体
在freetype中实现算法不同,点阵字体粗体更好看一些。
libXft-2.1.7-lazy-embolden.diff补丁中有个bug,因为用上面方法构建字体时,
忘了将改变的参数保存回去,所以出现中文和英文参差不齐的结果。
修改方法如下:
+ if (subpixel)
+ FT_Outline_Transform (&glyphslot->outline, &matrix);
+ FT_Outline_Translate ( &glyphslot->outline, -left*hmul, -bottom*vmul );
+ FT_Outline_Get_Bitmap( _XftFTlibrary, &glyphslot->outline, &glyphslot->bitmap);
+
+ glyphslot->format = ft_glyph_format_bitmap;
+ FT_GlyphSlot_Embolden (glyphslot);
//在这里插入
xftg->metrics.x = -TRUNC(left);
xftg->metrics.y = TRUNC(top);
+ }
+#endif
见效果图
http://blog.linuxeden.com/get/140172/967-Screenshot.png
页:
1
[2]