Friday, 22 July 2011

Font Rendering in Fedora

Shortly said, it's not very impressive. But what are the options we have? Can we improve it? Well, there are some font settings that are available. See e.g. this blogpost about making fedora fonts look Ubuntu-like. Although I personally see that as making things worse, there are people who think otherwise. What I decided to do was to skim through most of the hinting options we have and decide for myself what looks best. And of course, provide my readers with some images so that they could decide for themselves.

So, I decided to do screenshots of some simple highlighted html code to showcase more than black-one white ;-) Initially I decided to make 9pt versions (which is what I use) and 12pt versions (which is standard text size on A4 paper) both for the "gui" variant (white background) and "tui" variant (black background). Halfway I got lazy, so I fully completed only the 9pt variant as you can see in the next two images (click on them to see unscaled). The sorting is this: on left side there are renderings without freetype-freeworld, on the right side there are renderings with freetype-freeworld (and thus with subpixel hinting). From top to bottom: none hinting, slight hinting and full hinting. For some reason, medium and full hinting looks exactly the same on my laptop which is probably a bug (it didn't used to), that's why I hadn't included it.



From these few images I believe I can confidently say this:
  • increasing amount of hinting increases crispness of the characters (can be seen especially for horizontal lines that are often "smudged")
  • Freetype-freeworld tends to produce better results than freetype for smaller amount of hinting.
  • Freetype-freeworld introduces colour halo around the strokes.
  • Japanese is unhinted (I sense problems with autohinter)
  • Freetype-freeworld has better shapes, more smooth curves and better antialiasing, however it sacrifices crispness of the strokes (especially seen with full hinting)
  • Freetype-freeworld gives nicer results for e.g. orange on white, yellow on black or dark green black, while freetype gives nicer results for green on white, blue on white or red on black. At this size. I noticed that increasing the size is more favourable for freetype-freeworld.


I also include two shots with 12pt. Both with full hinting, both include whole geany window (app font is 9pt big), the first one is freetype (save xfwm which uses freetype-freeworld in both cases), the second one freetype-freeworld.



Well, decide for yourself what's best for you, but since the blurriness bugs me more than slight aliasing, I'll probably stay without freetype-freeworld and with full hinting.

6 comments:

Elder Marco said...

You can enable autohint too:

# ln -s /etc/fonts/conf.avail/10-autohint.conf /etc/fonts/conf.d/

Anonymous said...

"Freetype-freeworld introduces colour halo around the strokes"

color halos usually mean you have the wrong subpixel ordering set (RGB, BGR, V-RGB, V-BGR).

Martin said...

@adamwill: Nope, the halo is always there, only with wrong subpixel ordering set it is much much worse.

Anonymous said...

For me the font remain ugly in every aspect without enableing autohinter https://kevinkofler.wordpress.com/2011/05/19/hint-how-to-force-autohinting-on-fedora-15/

What is important in case you want to make a comparison like this is, that you have to take pictures out of the monitor (e.g. with camera), because representation of the image on the screen may differ from what you capture and show as a picture to others. The hinting modifies character shadows to suite the construction of subpixels on you monitor. What you see as perfect output, may look pretty weird on different kind of monitor.

Anonymous said...

http://www.infinality.net/blog/

Martin said...

@Anonymous: As long as the target person has the same type of subpixel order (in my case RGB, as with majority of people), it's fine like this. Taking it with camera does not work, it sees directly the pixels, unlike eye... But yeah, autohinter improves things a great deal.