如果文本的字体稍微大些或显示器分辨率较低,就会看到文本的边缘有锯齿。当我们想要消除文本的锯齿时,可能会找到Textfield类里有一个antiAliasType属性,该属性用于此文本字段的消除锯齿类型。但该死的是该属性仅在字体为嵌入(即 embedFonts
属性设置为 true
)时可以控制此设置。也就是说如果我们要用到antiAliasType来消除锯齿,就一定要用到嵌套字体。好吧,蛤如果将字体嵌套进去的话又有一个不可避免的问题,就是所嵌套的字体的体积如果过大会影响生成swf的体积,如果只选择一些字体就不灵活。不知为什么要用嵌套字体才能消除锯齿,嵌套字体和消除锯齿为什么不能分开呢?反正我是不好理解,相信也有很多人不好理解为什么要这么做。
还有如果对字体的锯齿处理效果要求不过高的话,可以为文本添加模糊滤镜。这样锯齿看起来就不那么尖锐,看起来效果会好些。在设置模糊滤镜时自己调一下滤镜模糊度已达到好的效果。
下面程序是利用添加模糊濾鏡淡化了鋸齒
package com.flash.UI.Util { import flash.display.DisplayObject; import flash.filters.BlurFilter; import flash.text.TextField; public class TextBlurFilter { public function TextBlurFilter() { } public static function GetTextBlurFilter(fontSize:Number):BlurFilter{ var blurX:Number=0; var blurY:Number=0; if(fontSize<10) return null; if(fontSize<12){ blurX=blurY=1.2; }else if(fontSize<16){ blurX=blurY=1.2; }else if(fontSize<22){ blurX=blurY=1.25; }else if(fontSize<26){ blurX=blurY=1.35; }else{ blurX=blurY=1.45; } var blur:BlurFilter=new BlurFilter(); blur.blurX=blurX; blur.blurY=blurY; blur.quality=1; return blur; } public static function SetTextBlurFilter(target:DisplayObject,fontSize:Number):void{ var blur:BlurFilter=TextBlurFilter.GetTextBlurFilter(Number(fontSize)); var flag:Boolean=false; if(blur!=null){ var filters:Array=target.filters; if(filters==null){ filters=new Array(); filters.push(blur); }else{ for (var i:uint = 0; i < filters.length; i++) { if (filters[i] is BlurFilter) { filters[i]=blur; flag=true; break; } } if(!flag){ filters.push(blur); } } target.filters=filters; } } } }