[Aggiornata] Migliorare visione font TrueType

Lun, 15/08/2005 - 15:04

[Aggiornata] Migliorare visione font TrueType

Inviato da ambroxa 20 commenti
Non sono in alcun modo responsabile di qualunque tipo di danni e/o problemi legali legati all'utilizzo di software patented e/o dall'utilizzo di parti di software (compresi i font) per i non aventi diritto.
Questa guida è stata testata con SuSe Professional 9.3 in lingua inglese e KDE 3.4 (rev. 0.2 , 16 Agosto 2005)
1. Introduzione

Ero abbastanza insoddisfatto della visualizzazione dei font TrueType (.ttf) nelle varie distribuzioni Linux (SuSe, Fedora, Mandrake...) per il fatto che non fosse qualitativamente all'altezza di Windows nonostante le librerie di rendering FreeType2 promettano grandi cose ed i font fossero i medesimi (presi da una installazione Windows dalla directory C:\Windows\Fonts).
Ed anche la mia recente installazione di SuSe Professional 9.3 era afflitta dal medesimo problema.

C'e' spesso confusione inerente il nome delle librerie FreeType
* FreeType1 is in freetype-1.0
* FreeType2 is in freetype-1.1 / 1.4
* FreeType6 is in freetype-2.0.1 and higher
In realtà a tutt'oggi quasi sempre con il termine FreeType2 si intendono le FreeType rel. >=2.0.1 , ossia le FreeType6.
In questo documento anch'io (come SuSe) userò il termine FreeType2 per indicare le librerie con versione >= 2.0.1 (FreeType6)

I problemi che rilevavo erano:

- disabilitando l'antialias (KDE menù Control_Center/Appearance_&_Themes/Fonts/Use_Antialiasing) i font TTF (esempio Arial, Verdana, Tahoma, ...) erano visualizzati in modo pessimo, con dei pixel spuri nei caratteri (esempio http://www.antikoerperchen.de/files/freetype/alias-autohint.png ).

- abilitando l'antialias la situazione era buona con i font di grandi dimensioni (>15pt) ma i caratteri a dimensione più piccola sembravano sfuocati. Questo è causato dal fatto che l'antialias pone dei pixel grigi adiacenti alle linee/punti che formano il carattere per ammorbidirne la visione. Nei caratteri piccoli ciò è controproducente in quanto produce un effetto di marcato sfuocamento. Sui caratteri di grandi dimensioni invece l'antialias ne migliora visione.

- disabilitando in modo selettivo l'antialias (KDE menù Control_Center/Appearance_&_Themes/Fonts/Configure/Exclude_Range) per i caratteri sino a 15 pt la situazione era un mix delle precedenti: i caratteri grandi si vedevano discretamente bene grazie alla presenza dell'antialias ma nei caratteri piccoli (<15pt) erano presenti i pixel spuri e si vedevano male.

- disponendo io di un buon monitor LCD l'attivazione del sub-pixel hinting nelle sue varie modalità (RGB,BGR,...) invece di migliorare la situazione la peggiorava. Il sub-pixel hinting è una metodica che sostituisce il colore grigio usato dall'antialias con il pixel colorato più vicino possibile nell'ambio della matrice TFT. Dovrebbe migliorare l'antialias nei monitor LCD ma onestamente in tutte le mie prove con vari monitor non ho mai visto grandi risultati.

- anche giocando con l'hinting style (none, slight, medium, full) non ottenevo risultati soddisfacenti.

Ero convinto che ci fosse una soluzione e dopo aver passato un pò di tempo a cercare con Google ho scoperto l'arcano (articoli di riferimento http://lists.suse.com/archive/suse-kde/2005-Jun/0122.html e http://www.antikoerperchen.de/deutsch/howto-30.php ).

La libreria FreeType2 che si occupa di renderizzare i font TrueType contiene un algoritmo software (il 'TrueType Bytecode Interpreter') che in fase di compilazione è stato disabilitato per problemi di licenza in quanto si tratta di un algoritmo registrato. Quasi nessun assemblatore di distribuzioni abilita questo algoritmo quando compila le librerie FreeType2 a causa di questo problema legale.

Questo provoca l'effetto dei pixel spuri sui caratteri TrueType di piccola dimensione senza antialias.

Quindi la soluzione finale si riduce a sostituire le librerie FreeType2 presenti nel vostro sistema con le medesime ricompilate abilitando tale algoritmo.

Ora ho una visione dei font TTF veramente perfetta (esattamente come in Windows) e tutti i problemi sono risolti (esempio http://www.antikoerperchen.de/files/freetype/alias.png ).

Per chi non se la sentisse o non volesse ricompilare le librerie già pronte QUI e potrete saltare direttamente alla sezione '5. Installazione librerie
Tutte le operazioni seguenti vanno eseguite loggandosi come root
2. Recuperiamo i sorgenti delle librerie

Innanzi tutto vediamo se avete le librerie FreeType2 installate ed in quale versione

# rpm -qi freetype2
Name : freetype2 Relocations: (not relocatable)
Version : 2.1.9 Vendor: (none)
Release : 4

Ok, sono installate le librerie FreeType2 ver. 2.1.9-4
Cercando con YAST ottengo comunque la stessa informazione (cercate la parola 'freetype').

Andiamo ora a recuperare i sorgenti .src.rpm delle librerie FreeType2 da uno dei tanti mirror a disposizione, ad esempio http://suse.inode.at/pub/i386/9.3/suse/src/ oppure http://suse.inode.at/pub/i386/update/9.3/rpm/src/ se avete una versione più recente che è stata updatata.
Nel caso preso qui in esame (ver. 2.1.9-4) prelevate il file freetype2-2.1.9-4.src.rpm (da http://suse.inode.at/pub/i386/9.3/suse/src/ ).

3. Installazione sorgenti e modifica file .spec

Installate i sorgenti

# rpm -Uvh freetype2-2.1.9-4.src.rpm

Editate il file /usr/src/packages/SPECS/freetype2.spec

Circa alla riga 68 troverete

# Remove the comment character in front ot the '%patch100' line
# if you want to turn on the bytecode interpreter.
# But first read http://www.freetype.org/freetype2/2.1.3-explained.html
# I.3. Do I still need to enable the TrueType bytecode interpreter ?
#
# Short answer: No for most people !!
#
#%%patch100 -p 1 -b .bytecode

Togliete il "#%" posto all'inizio della riga "#%%patch100 -p 1 -b .bytecode" ottenendo così

# Remove the comment character in front ot the '%patch100' line
# if you want to turn on the bytecode interpreter.
# But first read http://www.freetype.org/freetype2/2.1.3-explained.html
# I.3. Do I still need to enable the TrueType bytecode interpreter ?
#
# Short answer: No for most people !!
#
%patch100 -p 1 -b .bytecode

e salvate il file.

4. Compilazione

Premessa: assicuratevi di avere installato le librerie zlib-devel (usate YAST).

Ricompilate le librerie FreeType2 con

# rpmbuild -bb /usr/src/packages/SPECS/freetype2.spec

E' quasi certo che la compilazione non andrà in porto in quanto mancheranno una serie di librerie/pacchetti aggiuntivi. Per correttezza formale dovreste installare tali librerie/pacchetti (usate YAST) e rilanciare la compilazione.

Se siete certi di quello che fate potete usare l'alternativa di ignorare le dipendenze compilando con

# rpmbuild -bb /usr/src/packages/SPECS/freetype2.spec --nodeps

Se tutto è andato bene in /usr/src/packages/RPMS/i586 avrete le vostre nuove librerie FreeType2 con il ByteCode Interpreter abilitato !

5. Installazione librerie

Ora non rimane altro che installare le librerie (sovrascrivendo le precedenti) con

# rpm -Uvh /usr/src/packages/RPMS/i586/freetype2-2.1.9-4.i586.rpm --force
# rpm -Uvh /usr/src/packages/RPMS/i586/freetype2-devel-2.1.9-4.i586.rpm --force
6. Configurazione finale di KDE

Andate nel Control Center di KDE nel menù Appearance_&_Themes/Fonts/
- cambiate tutti i font con uno TrueType. Io uso 'Tahoma'. Provate anche 'Verdana' (per quello 'Fixed Width' uso 'Andale Mono').
- abilitate l'antialias
- andate nella sezione Configure ed escludete dall'antialias i font compresi tra 0pt e 15pt
- non abilitate il sub-pixel hinting
- ponete hinting style a 'medium' (o comunque non ponetelo MAI a 'NONE')

Fate un logout, riavviate X e .... buona visione.

Attenzione agli update: se nel futuro dovesse rendersi disponibile un update delle librerie FreeType2 da parte di SuSe e lo installerete, ricordatevi che la nuova libreria non avrà il BYTECODE INTERPRETER attivato e quindi dovrete rifare nuovamente la presente procedura ma con i nuovi sorgenti .src.rpm
7. Per chi non usa RPM

E' abbastanza semplice ricompilare le librerie partendo dai sorgenti originali presenti su http://www.freetype.org
Prelevate i sorgenti ver. 2.1.9 (o superiori)
Decomprimeteli ed editate il file freetype-2.1.9/include/freetype/config/ftoption.h
Circa alla riga 439 togliete il commento alla riga "#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER"
Assicuratevi di avere installate le librerie zlib-devel
Loggati come root, ricompilate ed installate con gli usuali comandi

# ./configure --prefix=/usr
# make
# make install


In:



Commenti

Ritratto di Stefano
#1

Inviato da Stefano il Lun, 15/08/2005 - 17:02.

Complimenti...

Guida davvero interessante ed uso dei tag dei formattazione davvero impeccabile.

Voto: 9

Stefano Mainardi - Founder of ILDN & CEO of Twinbit



Ritratto di ZeroPerCento
#2

Inviato da ZeroPerCento il Gio, 26/04/2007 - 14:21.

Re: Complimenti...

Ciao a tutti vorrei condividere la mia personale esperienza riguardo la visione dei caratteri True Type su openSUSE 10.2
Premesso che ho una ATI Radeon X1300 e con i driver ufficiali ATI funziona perfettamente e ho un monitor settato alla risoluzione di 1280 x 1024 ho proceduto semplicemente così:
1) Ho installato i font True Type di Microsoft
2) In Aspetto e Temi -> Tipi di carattere ho i seguenti settaggi:
a) Utilizza Antialiasing per i caratteri attivato su Medio e escludi Intervallo 0,0pixel 11 pixel
Cool Forza DPI per i caratteri a 96dpi attivato
c) Tutti i fonts settati ad Arial a 10 punti

In questo modo ho una visione perfetta dei fonts senza bisogno di attivare il Bytecode Interpreter

Spero di essere stato utile. Ciao Laughing

Laughing
W Linux!!!!!!!!!!!!



Ritratto di paulatz
#3

Inviato da paulatz il Mar, 16/08/2005 - 14:46.

La migliore

La migliore delle guide disponibili al momento sul sito.

Aggiungo che se si ricompilano le librerie con la stessa versione di quelle installate sul sistema si deve usare l'opzione --force per installarle.

Grazie mille.



Ritratto di Krystyan
#4

Inviato da Krystyan il Mar, 16/08/2005 - 20:50.

Re: La migliore

Guida davvero perfetta... senti puoi postarmi il pacchetto che hai ricompilato? così non appesantisco il sistema con i devel... grazie! Laughing

Suse Linux 10.0 su P4 3.2 Ock 4.3Ghz - Motherboard asus P4C800 Dlx - Ram 512x2 Vdata utt @250 2.2.2.5 - Video Nvidia6800ultra



Ritratto di Stefano
#5

Inviato da Stefano il Gio, 18/08/2005 - 06:30.

Re: La migliore

Ho aggiornata la guida.
Abbiamo hostato anche le librerie per evitare di farvele ricompilare a mano...

Ma quanto vi vogliamo bene??? :-P

Stefano Mainardi - Founder of ILDN & CEO of Twinbit



Ritratto di ambroxa
#6

Inviato da ambroxa il Gio, 18/08/2005 - 18:47.

Leggete anche questo post !

Ciao da Ambroxa.

A posteriori ho trovato alcune ulteriori possibilità di configurare in modo fine la gestione dei font non-truetype lavorando direttamente in XML con i file .fonts.conf e soci.

Leggete questo post http://www.suseitalia.org/modules/newbb/viewtopic.php?topic_id=2890 se siete interessati all'argomento.

Ciao e grazie per l'attenzione.



Ritratto di mazda3
#7

Inviato da mazda3 il Gio, 18/08/2005 - 19:16.

Ottima.........

al primo tentativo i risultati non erano stati quelli sperati, probabilmente avrò sbagliato qualcosa, ora con le librerie già compilate tutto OK.

Complimenti, da mettere in rilievo "perenne" Big Grin



Ritratto di danylele74
#8

Inviato da danylele74 il Lun, 22/08/2005 - 13:25.

piccola informazione

Ciao a tutti.
Volevo sapere se una volta installate le librerie freetype2-2.1.9-4.i586.rpm e freetype2-devel-2.1.9-4.i586.rpm (vedi punto 5 della giuda) e possibile ritornare alle librerie originarie.



Ritratto di ambroxa
#9

Inviato da ambroxa il Lun, 22/08/2005 - 20:23.

Certo !

Certo, riprendi le librerie originali e con lo stesso meccanismo "rpm -Uvh .... --force" le reinstalli.
Quindi tutto tornerà come prima.

I comandi usati al punto "5. Installazione" fanno sì che le librerie sia SOVRASCRITTE.
Quindi tu hai installate le lib originali e le sovrascrivi installando quelle modificate. Se vuoi tornare indietro basta che prendi le librerie originali, le reinstalli e sovrascriveranno le precedenti modificate.
Semplicissimo.



Ritratto di danylele74
#10

Inviato da danylele74 il Lun, 22/08/2005 - 20:32.

Re: Certo !

Scusa ma siccome non sono un grande esperto del mondo linux mi potresti dire cortesemente quali sono le librerie e dove reperirle?

Grazie 1000