Embed font přes meta-data AS3
Listopad 1st, 2009 od admin, v kategorii Flash. Bez komentářů
Flash CS4 zaznamenal jeden vcelku závažný problém, a to že když se vloží do knihovny font, tak k výslednému flashi se sice připojí, ale bohužel ne kompletní. To lze vyřešit za pomocí Flex builderu(Flash builderu), díky kterému se nová možnost vkládání fontů přidala i do Flashe CS4.
Jediné omezení ve Flashi je, že se toto řešení nedá použít přímo na časové ose, ale pouze ve třídě. Ale to by neměl být žádný problém.
Ukázka jednoduchého vložení fontu:
package { public class Main{ [Embed(source="C:/WINDOWS/Fonts/arial.ttf", fontFamily="mujFont")] public var Arial:Class; } }
použití je pak již snadné
package { import flash.text.TextField; import flash.text.TextFormat; import flash.display.MovieClip; public class Main extends MovieClip{ [Embed(source="C:/WINDOWS/Fonts/arial.ttf", fontFamily="mujFont")] public var Arial:Class; public function Main():void{ var txtF:TextField = new TextField(); var txtFMT:TextFormat = new TextFormat(); txtFMT.font = "mujFont"; txtF.text = "Ahoj světe"; txtF.embedFonts = true; txtF.setTextFormat(txtFMT); addChild(txtF); } } }
Takovéto řešení není, ale na projektech u kterých zavisí na velikosti souboru moc efektivní. Pochopitelně lze načítat font i externě za běhu aplikace, ale velikost lze snížit i tím, že omezíme načítané znaky pouze na latinku. To se dělá pomocí parametru unicodeRange. Pro již zmíněnou latinku toto řešení vypadá asi takto.
[Embed(source="C:/WINDOWS/Fonts/arial.ttf", fontFamily="mujFont", unicodeRange="U+0020-U+007F,U+0080-U+00FF,U+0100-U+017F,U+02B0-U+02FF,U+2000-U+206F,U+2070-U+209F,U+2150-U+218F,U+2200-U+227F")]
Font Arial zrovna není nejlepší případ na ukázku tohoto omezení, protože obsahuje pouze latinku, ale některé fonty obsahují spoustu zbytečných znaků, které tímto můžeme eliminovat. Například u tohoto fontu můžeme znaky omezit třeba jen na číslice, kde již rozdíl ve velikosti bude znatelný, konkrétně to bude vypadat nějak takto.
[Embed(source="C:/WINDOWS/Fonts/arial.ttf", fontFamily="mujFont", unicodeRange="U+0030-U+0039")]
Tímto už snížeme velikost asi z 200kB na 2kB.