"CSS Font-face" teszt
A megoldás kivitelezése viszonylag egyszerű, nem igényel nagy mennyiségű plusz forráskódot.
Mint itt a teszt oldalon is látható, a betűtípusok változtathatósága érdekében PHP-val generált
pár böngészőfüggő CSS-sor megírása és a *.eot plusz *.ttf font-fájlok
feltöltése után már működik is. Íme a "CSS Font-face" címszó alatt futtatott kód:
GeSHi
Syntax Highlighting 1.0.8.1 © 2004-2007, Nigel McNie, 2007-2008 Benny Baumann.
//aktuális font-típus CSS-beállítás
echo '<style type="text/css" media="screen">'."\n";
echo '@font-face {'."\n";
echo 'font-family:"'.$font_Names[$aktual_font].'";'."\n";
switch ($aktual_browser)
{
case "ie":
echo 'src: url("fonts/'.$font_Files[$aktual_font].'.eot");'."\n";
break;
case "opera":
echo 'src: url("fonts/'.$font_Files[$aktual_font].'.ttf") format("truetype");'."\n";
break;
default:
echo 'src: local("'.$font_Names[$aktual_font].'"), url("fonts/'.
$font_Files[$aktual_font] .'.ttf") format("truetype");'."\n";
break;
}
echo 'text-align:left;color:black;direction:ltr;text-indent:20px;font-size:18px;'."\n";
echo 'font-family: '.$font_Names[$aktual_font].', Arial, helvetica, sans-serif;'."\n";
echo '.image-leftbox{'."\n";
echo 'position:relative;float:left;border-style:none;margin:0;padding:0 10px 0 0;'."\n";
echo 'font-family: '.$font_Names[$aktual_font].', Arial, helvetica, sans-serif;'."\n";
echo 'h3, span.kereso{'."\n";
echo 'font-family: '.$font_Names[$aktual_font].', Arial, helvetica, sans-serif;'."\n";
echo 'font-size:16px;'."\n";
Az Opera és IE esetében mint látható, egy kicsit másképp kellett megadni
az "src" paramétert, mint a többinél.
Az IE -nek nem *.ttf (True TypeFont) vagy *.otf (Open TypeFont), hanem *.eot
(Embedded OpenType) fájl kell. (ezért kell egy fontot két változatban feltölteni a kiszolgálóra!)
A CHROME csak akkor jeleníti meg ezzel a módszerrel az egyedi fontokat, ha a következő
paraméterrel futtatom (opr: windows esetén), ami egy átlag felhasználótól nem várható el:
chrome.exe --enable-remote-fonts
A Mac OS X/Safari esetében az űrlap elemekre (<select> és <input>) megadott egyedi fon-stílus
nem érvényesül (a beállításokban erre vonatkozó módosítási lehetőséget nem találtam).
A fentebb jelzett opr/böngésző variációkkal kapcsolatban van tesztelési tapasztalatom. Ezekben az esetekben
az említett feltételekkel (Firefox3.5, Opera10, IE4.0, Safari3.1 fölött és Chrome3.0 fölött kapcsolóval)
láthatóan kiválóan és gyorsan működött a megoldás, betűtípusok közötti váltás esetén is.
Összegezve a tapasztalataimat: Ma számomra ez lenne a legjobb megoldás, persze csak akkor ha már a
számítógépek többségén a fent említett böngésző verziók futnának. Azonban nem javaslom általánosan a módszer
alkalmazását, mivel nincs garantálva a felhasználók többségénél a stabil, verzió független működés.
"JS Cufón-font" teszt
A megoldás kivitelezése egy kicsit több munkát igényel, mint az előző. Először
le kell tölteni
az alábbi JS fájlokat:
Következő lépésként a
Cufón Generátor segítségével
a használni kívánt font-fájlokból
létre kell hozni a szükséges
XX.font.js fájlokat.
A letöltött
két fájlt és a generált
font-fájlt kell a
szerverre feltölteni a működés érdekében.
Az oldal forráskódjának <head> részében meg kell hívni a feltöltött JS -fájlokat, majd
be kell állítani a szükséges elemekre a kívánt font-típust. Beállításkor egy adott
egyedi fontra az eredeti *.ttf font fájlban vagy a generált XX.font.js fájlban megnézhető font-névvel,
egy adott elemre az "elem / class / id"-vel is lehet/kell hivatkozni.
!!!!
A fájlnevekben kerülni kell az ékezetes karaktereket (ha van, a fájlt átnevezni munkábavétel előtt)! Néhány fontnál
előfordult, hogy a generált JS -fájlban rossz formában került be a font neve (ékezet volt a névben). Ilyenkor ki
kell javítani a "JS-fájlban" a font-fájlban találhatóra és arra is kell hivatkozni a beállításkor!
!!!!
A különböző beállítási módokat és opciókat a
Cufón API oldalon
lehet tanulmányozni. Legvégül, mint az alábbi forráskód mintában is látszik a </body> előtt még
inicializálni kell a "cufon"-t.
GeSHi
Syntax Highlighting 1.0.8.1 © 2004-2007, Nigel McNie, 2007-2008 Benny Baumann.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="hu">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="hu" />
<meta name="robots" content="all" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<!-- IE miatt a "cufon-yui.js" előtt meghívni -->
<!--[if lte IE 7]><script src="js/jquery-1.3.2.min.js" type="text/javascript"
charset="utf-8"></script><![endif]-->
<script src="js/cufon-yui.js" type="text/javascript"></script>
<!-- aktuális font-js fájlok -->
<script src="fonts/XX.font.js" type="text/javascript"></script>
<script src="fonts/XY.font.js" type="text/javascript"></script>
<!-- egyedi font beállítása a szükséges elemekre -->
<script type="text/javascript">
Cufon.replace('h1', {fontFamily:'XX', color:'green', fontWeight:'700'});
Cufon.set('fontFamily', 'XY').replace('div.multi')('div#cim');
<!-- A teljes tartalmi rész kódsorai -->
<script type="text/javascript">
Cufon.now();
Az általam kipróbált összeállítások (oprendszer/böngésző) esetén, eddig nem tapasztaltam problémát
vagy működési zavart. Egy valamire azért felhívom mindenki figyelmét:
!!!!
Ha egy elemet beállítottunk egy adott betűtípusra, azon belül a tartalom egy részét egy másik
elemmel már nem lehet megváltoztatni.
!!!!
Az előző módszerrel, mint a "CSS Font-face" címszó alatt látni, ez is lehetséges
(pl: egy <div> elembe elhelyezett <span> elemmel).
Összegezve a tapasztalataimat: Hosszabb szövegek dekoratív megjelenítésére bátran ajánlom
megoldásként, nálam eddig minden összeállításban működött. Azonban szerintem csak akkor érdemes
több energiát befektetni és feltölteni viszonylag nagyméretű fájlokat a szerverre, ha az összességében megéri.
Rövidebb szövegrész esetében (címek, menüpontok, dekorációk) pedig CSS-háttérképként célszerű
betölteni egy valamilyen módszerrel létrehozott "font-kép" -et.
"PHP Image-Font" teszt és "Image Creator"
A "PHP GD library" -ban található függvények felhasználásával is lehetséges futás közben *.ttf
típusú font-fájlból létrehozni egy képet ill. képfájlt. Az eddigiek közül
talán ennek a módszernek a kidolgozása járt számomra a legtöbb munkával, mivel nem találtam az interneten
könnyen beilleszthető megoldást. Végül is sikerült elfogadható formában összehozni egy olyan összetett
eljárást, amely alkalmas akár futás-időbeni, akár egy kép-generátor alap-elemeként történő felhasználásra.
Kissé bonyolultra sikeredett, mivel próbáltam "univerzálissá" kialakítani.
Íme a "PHP Image-Font" és az "Image Creator" címszó alatt futtatott kód:
GeSHi
Syntax Highlighting 1.0.8.1 © 2004-2007, Nigel McNie, 2007-2008 Benny Baumann.
//A KÉPET LÉTREHOZÓ FÜGGVÉNY TARTALMA VÁZLATOSAN
{
//BEGIN behúzó szóköz beállítás
$indent_count = array(""," "," "," "," "," ");
$behuzas = ($behuzas > 5)? 5 :($behuzas < 0 ? 1 :$behuzas);
$indent = $indent_count[$behuzas];
//behúzó-jel karakter cseréje behúzó szóközökre (preg_replace-vel)
$szoveg = charswapping($szoveg,$indent);
//END behúzó szóköz beállítás
//BEGIN font-szám minimum beállítása
if (($font_szam < 1) or ($font_szam > 80))
{ $font_szam = 50; }
else
{ $font_szam = $font_szam; }
//END font-szám minimum beállítása
//Teljes szöveg befoglaló téglalap kalkuláció
$_bx = imageTTFBbox
($font_meret,0,getcwd().$font_fajl,$szoveg);
//BEGIN sorok számának megállapítása -> $s
$s = preg_split('/[\n\r]+/',$szoveg); //tömb a soroknak
$nL = count($s); //sorok száma
//END sorok számának megállapítása
//BEGIN egy-soros minta-szöveg befoglaló téglalap kalkuláció (font függő)
$abc ="ÁRVÍZTŰRŐ árvíztűrő GÁT gát ";
$font_minta = imageTTFBbox
($font_meret,0,getcwd().$font_fajl,$abc);
$font_W=abs($font_minta[2]-$font_minta[0]);
$font_H=abs($font_minta[5]-$font_minta[3]);
//END egy-soros minta-szöveg befoglaló téglalap kalkuláció
//egy-két művelet részletek nélkül (nagyméretű kódok)
//dőlésszög korlátok beállítása
//képszélesség/képmagasság (beállított/kalkulált)
//megjelenített képszélesség korlát beállítás
//a "$im" alap-kép létrehozása
//Végül a "font-kép + árnyék-kép" létrehozása (balra v. középre v. jobbra igazítással)
foreach($s as $key => $val)
{ //hosszú számolási műveletek után
imageTTFText
($im, $font_meret, $sor_doles, $_X, $_Y, $font_szin, getcwd().$font_fajl, $val);
if ($arnyek)
{ imageTTFText
($im, $font_meret, $sor_doles, $_X+1, $uj_Y+1, $arny_szin, getcwd().$font_fajl, $val); }
}
//a műveletek eredménye
return $im;
}
//A FÜGGVÉNY MEGHÍVÁSA (a változók magukért beszélnek)
$szoveg_kep = (imagettfJustifytext($szoveg, $sorok_szama, $font_fajl, $font_szam,
$igazit_hor, $sor_koz, $kep_szeles, $kep_magas,
$kep_magas_kor, $font_meret, $sor_doles,
$font_szin, $arny_szin,$arnyek, $behuzas));
//A FÜGGVÉNY MEGHÍVÁSA UTÁNI LÉPÉSEK
//másolás local-fájlba
$szeles = imagesx($szoveg_kep);
$magas = imagesy($szoveg_kep);
$szoveg_kep_local = @imagecreate($szeles, $magas);
imagecopy($szoveg_kep_local, $szoveg_kep, 0, 0, 0, 0, $szeles, $magas);
imagepng($szoveg_kep_local, 'created-dir/xy.png');
//erőforrások felszabadítása
imagedestroy($szoveg_kep_local);
imagedestroy($szoveg_kep);
//AZ "xy.png" MEGJELENÍTÉS <img> ELEMBEN
<img class="font-image" alt="" src="created-dir/xy.png" />
A módszerrel létrehozott font-kép felhasználásának előnye, hogy a szerverre feltölteni csak a
szükséges képfájlokat kell és CSS -vel beállítani háttérként. Teszt-célú esettől
eltekintve futásidőben nem célszerű létrehozni ezzel a módszerrel egyedi fonttal megjelenített tartalmat,
mivel plusz letöltési idővel, plusz feltöltendő állományokkal és elég
macerás beállítással kell számolni egy-egy kép-fájl kívánt megjelenésének elérése érdekében
(a szükséges paraméterek nagyon függnek az adott font-típustól). Erre bárki rájöhet ha kipróbálja a
"Image Creator" címszó alatt lévő Font-Kép Kreátor-t. Futás idejű használattal csak abban
az esetben érdemes megpróbálkozni, ha egy díszesen megjelenítendő rész tartalmát viszonylag gyakran kell
módosítani/cserélni, a függvény többi bemenő paraméterének változtatása nélkül.
Összegezve a tapasztalataimat: Font-képet rövidebb, díszítő jellegű szövegek dekoratív megjelenítésére célszerű
alkalmazni. Ez még akkor is igaz lesz, ha a "font-face" szabály támogatottsága általánossá válik a böngészők
többségében, mivel nem szükséges font-állományok feltöltése a szerverre (20-30 pár szavas szöveg-kép
kisebb méretű, mint egyetlen fontfájl).
!!!!
Opera esetén ha a beállításoknál nincs bejelölve "Az űrlapok stílusa változtatható" sor, akkor az űrlap elemek
esetében a háttérként berakott font-kép nem jelenik meg.
!!!!
!!!!
Kérlek ne feledd, hogy neked kell gondoskodni arról, hogy jogod van bármilyen betűtípus használatára!
Sok font gyártó kifejezetten tiltja az újrafelhasználást és a betűtípusok beágyazását.
A felelősség a tiéd megbizonyosodni arról, hogy a helyi jogi és szerzői jogi törvényeknek megfelelően jársz el.
!!!!