🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.ogonki
Article #7268

Re: Fonty wektorowe (dość długie)

#7268
From: fidel.net
Date: Fri, 18 Sep 1998 16:21
216 lines
10219 bytes
Witam,

spróbuję pokrótce.

Fonty Type 1 i TrueType są typowymi przedstawicielami fontów wektorowych na
platformach graficznych (MS Windows, MS Windows NT, Macintosh, XWindows). Do
ich wyświetlania potrzebny jest rasteryzer, tj. program, który zamienia
obwiednię matematyczną na mozaikę punktów odpowieniej wielkości. Rasteryzery
fontów TrueType wbudowane są w systemy Microsoft Windows i MacOS, istnieją
także rasteryzery na inne platformy (np. dla XWindows -- m.in. FreeType,
TypeMan). Rasteryzerem fontów Type 1 (a także Type 3) jest program Adobe
TypeManager, który na niektórych platformach zintegrowany jest z systemem
(np. Solaris), na większości jednak dostępny jest jako pakiet komercyjny.
Można więc ogólnie założyć, że z fontów obydwu formatów (TrueType i Type 1)
korzystać można na wszystkich popularnych platformach.

Format Adobe Type 1 opracowany został przez firmę Adobe z myślą o
wykorzystaniu w urządzeniach drukujących posługujących się językiem
PostScript. Z początku specyfikacja tego formatu trzymana była w tajemnicy,
głównie ze względu na mechanizm hintingu, tj. optymalizacji kształtu liter w
bardzo małych stopniach pisma.  Mechanizm ten odgrywał wówczas (w okresie
popularności drukarek laserowych 300 dpi) ogromną rolę w druku.

Ponieważ format Type 1 nie był ogólnie dostępny, zaś za wykorzystanie
rasteryzera tych fontów trzeba było płacić słone licencje, firmy Apple i
Microsoft opracowały konkurencyjny format fontów, TrueType. Miał to być
format łatwiejszy do wykorzystania przez system operacyjny i uwzględniający
specyfikę wyświetlania fontów na ekranie. W odpowiedzi Adobe odtajniła
specyfikację Type 1, jednak prace rozwojowe nad TrueType zaszły już dość
daleko, zaś Adobe w dalszym ciągu prowadziła ostą politykę licencyjną, tym
razem w stusunku do języka PostScript, który jest niejako koniecznym
uzupełnieniem formatu Type 1.

Font Type 1 składa się z dwóch plików: metrycznego i binarnego. Plik binarny
(zakodowany) ma budowę słownikową. Istnieje kilka "słowników" zawierających
dane o kroju pisma -- przede wszystkim o kształtach liter i rozmieszczeniu
hintów.

Znaki w fontach Type 1 zbudowane są na bazie krzywych Beziera 3 stopnia.
Zapewnia to kompatybilność z językiem PostScript i ułatwia tworzenie takich
fontów projektantom (większość programów ilustracyjnych również stosuje
krzywe Beziera 3 stopnia). Wygląd poszczególnych znaków zapisany jest w
specjalnym języku przypominającym PostScript.

Plik binarny zawiera także definicję hintingu czyli informacje, w jaki
sposób rasteryzer ma wyświetlać znak w niskich rozdzielczościach (wówczas na
znak przypada niewiele pikseli i może dojść do przekłamań, wynikających z
konieczności uproszczenia kształtu litery i z różnic w zaokrąglaniu
szerokości lub wysokości poszczególnych elementów). Hinting w fontach Type 1
jest zbiorem "słów-wskazówek", które przypisywane są poszczególnym elementom
różnych liter. Rozmiar wszystkich elementów opatrzonych tym samym "słowem"
powinien być w przypadkach wątpliwych zaokroąglany to tej samej liczby
pikseli.

Oto przykładowa definicja litery H:
=========================================
/H {
83 741 hsbw
21 -21 hstem
337 94 hstem
700 -20 hstem
434 141 vstem
0 141 vstem
575 698 rmoveto
-141 hlineto
-267 vlineto
-293 hlineto
269 vlineto
-141 hlineto
-700 vlineto
141 hlineto
337 vlineto
293 hlineto
-337 vlineto
141 hlineto
closepath
endchar
} ND
=========================================
"hstem" i "vstem" to hinty, reszta zaś to instrukcje kreślące kształt litery
H.

Plik metryczny zawiera informacje o rozmiarach znaków oraz kerningu (korekta
optyczna świateł międzyliterowych).


Adobe opracowało też format Type 3, który co prawda nie zawiera informacji o
hintach, za to znaki mogą być kreślone przy użyciu pełnej palety instrukcji
postscriptowych. Umożliwia to stosowanie w takich fontach rozmaitych
"efektów specjalnych". Np. w foncie BeoWolf holenderskiej firmy LettError
wszystkie znaki podlegają w czasie drukowania ciągłej niewielkiej losowej
modyfikacji, dzięki czemu jedna i ta sama litera za każdym razem przybiera
minimalnie inny kształt (jeśli napisze się tym fontem ciąg "BBBB", to każda
z tych liter będzie inaczej zdeformowana).

Format TrueType jest od formatu Type 1 dużo bardziej skomplikowany, posiada
za to więcej możliwości i nietrudno go rozszerzać o nowe możliwości. Fonty
TrueType, zawarte w jednym pliku, zbudowane są w postaci serii
rekurencyjnych tabel, z których każda opisuje inny aspekt fontu.


Oto również definicja litery H, z tym że w formacie TrueType (oczywiście
odkodowanym):

=========================================
 Glyph  43: off = 0x00001CF4, len = 104
   numberOfContours: 1
   xMin:   200
   yMin:   0
   xMax:   1339
   yMax:   1489

 EndPoints
 ---------
   0:  11

   Length of Instructions: 58
 00000: NPUSHB      (35):     3    53     0     8    16     8     2     8
8     5
                             10     7     3     1     5     8     9     2
20     0
                            120    13    15    13    64    13    80    13
3     8
                              3    20     5   108    12
 00037: SRP0
 00038: MIRP[srp0,nmd,rd,2]
 00039: MIRP[srp0,md,rd,1]
 00040: SHP[rp2,zp1]
 00041: DELTAP1
 00042: SRP0
 00043: MIRP[srp0,nmd,rd,2]
 00044: MIRP[srp0,md,rd,1]
 00045: SHP[rp2,zp1]
 00046: SVTCA[y-axis]
 00047: MIAP[rd+ci]
 00048: ALIGNRP
 00049: MIAP[rd+ci]
 00050: ALIGNRP
 00051: SRP2
 00052: IP
 00053: MDAP[rd]
 00054: DELTAP2
 00055: MIRP[nrp0,md,rd,1]
 00056: IUP[y]
 00057: IUP[x]

 Flags
 -----
   0:  YDual                               On
   1:  YDual                       X-Short On
   2:        XDual                         On
   3:  YDual                               On
   4:        XDual                         On
   5:  YDual                       X-Short On
   6:        XDual                         On
   7:  YDual XDual                 X-Short On
   8:        XDual                         On
   9:  YDual                               On
  10:        XDual                         On
  11:  YDual XDual                 X-Short On

 Coordinates
 -----------
   0: Rel (  1339,     0)  ->  Abs (  1339,     0)
   1: Rel (  -198,     0)  ->  Abs (  1141,     0)
   2: Rel (     0,   729)  ->  Abs (  1141,   729)
   3: Rel (  -743,     0)  ->  Abs (   398,   729)
   4: Rel (     0,  -729)  ->  Abs (   398,     0)
   5: Rel (  -198,     0)  ->  Abs (   200,     0)
   6: Rel (     0,  1489)  ->  Abs (   200,  1489)
   7: Rel (   198,     0)  ->  Abs (   398,  1489)
   8: Rel (     0,  -584)  ->  Abs (   398,   905)
   9: Rel (   743,     0)  ->  Abs (  1141,   905)
  10: Rel (     0,   584)  ->  Abs (  1141,  1489)
  11: Rel (   198,     0)  ->  Abs (  1339,  1489)

=========================================

Znaki w fontach TrueType zapisane są przy pomocy krzywych 2. stopnia, tzw.
B-Splines. Dzięki temu fonty TrueType mogą być (i są) szybciej kreślone na
ekranie. Aby wydrukować taki font w urządzeniu postsciptowym, do niedawna
system operacyjny musiał konwertować fonty TrueType do postaci Type 1, co
nie zawsze odbywało się zgodnie z oczekiwaniami. Czasem pojawiały się błędy
i stąd utarło się przekonanie, że fonty TrueType nie nadają się do
profesjonalnego przegotowywania publikacji, a tylko do zastosowań biurowych.
Na szczęście praktycznie wszystkie nowe postscriptowe urządzenia drukarskie
"rozumieją" także TrueType (jako tzw. Type 42), a więc problem już nie
istnieje.

W powyższym fragmencie kodu można znaleźć linijkę "Length of instructions":
Po niej następuje seria instrukcji -- są to instrukcje języka TrueType talk,
służącego do opisywania hintingu. Jak widać, język ten jest dużo bardziej
skomplikowany niż hinty Type 1 i ma to też swoje uzasadnienie.

O ile bowiem w fontach TrueType przy pomocy hintów można ze 100%
skutecznością kontrolować każdy pojedynczy piksel pojawiający się na ekranie
w każdej rozdzielczości, o tyle hinty Type 1 to zaledwie zwykłe
"podpowiedzi" dla rasteryzera. Różnica polega na tym, że hinting Type 1 jest
interpretowany przez rasteryzer i wykonywany tak, jak przewidział to
producent *rasteryzera*, natomiast hinting TrueType jest wykonywany przez
rasteryzer tak, jak to zaplanował producent *fontu*.


Najnowszą inicjatywą jest OpenType. Jest to połączenie Type 1 i TrueType. W
zasadzie, jest to takie rozszerzenie formatu TrueType, które pozwala używać
w foncie nie tylko kodu TT ale też kodu T1, a zarazem podobne rozszerzenie
formatu Type 1, które pozwoli na umieszczanie w nim kodu TT. Poza tym w
formacie tym przewidzianych jest mnóstwo innych atrakcji, takich jak pełna
obsługa unikodu, alternatywne kształty znaków, ligatury, "inteligentna"
obsługa wielu języków itp.

Do dalszej lektury zapraszam na stronę http://www.font.org/

Pozdrawiam,
   Adam Twardoch <adam.twardoch@euv-frankfurt-o.de>
   FONT.ORG      <http://www.font.org/>
Technical Details
Message-ID: <6tu1aq$be6$1@usenet41.supernews.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!newsfeed.direct.ca!Supernews73!supernews.com!Supernews69!not-for-mail
References: <Pine.LNX.4.03.9809171736080.4680-100000@qrnik.knm.org.pl> <Pine.BSF.4.02A.9809181428300.17247-100000@hoth.amu.edu.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!newsfeed.direct.ca!Supernews73!supernews.com!Supernews69!not-for-mail
From: <fidel.net@usa.net>
Newsgroups: pl.comp.ogonki
Subject: Re: Fonty wektorowe (dość długie)
Date: Fri, 18 Sep 1998 18:21:17 +0200
Organization: http://www.supernews.com, The World's Usenet: Discussions Start Here
Lines: 219
Message-ID: <6tu1aq$be6$1@usenet41.supernews.com>
References: <Pine.LNX.4.03.9809171736080.4680-100000@qrnik.knm.org.pl> <Pine.BSF.4.02A.9809181428300.17247-100000@hoth.amu.edu.pl>
X-Trace: 906135706 VDP8EIPKS7ABCC1AE usenet41.supernews.com
X-Complaints-To: newsabuse@supernews.com
X-Newsreader: Microsoft Outlook Express 4.72.3110.1
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit