Girish Mahajan (Editor)

FreeType

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Written in
  
C

Operating system
  
Cross-platform

FreeType

Developer(s)
  
David Turner, Robert Wilhelm, Werner Lemberg and FreeType contributors

Initial release
  
1996; 21 years ago (1996)

Stable release
  
2.7.1 / December 30, 2016; 2 months ago (2016-12-30)

Repository
  
git.savannah.gnu.org/cgit/freetype/

FreeType is a popular software development library used to render text onto bitmaps, and provides support for other font-related operations. The FreeType font rasterization engine is free and open source software with the source code dual-licensed under a BSD-like license and the GPL. FreeType supports a number of font formats, including TrueType, Type 1, and OpenType and "is designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output (glyph images)."

Contents

Features

Ability to access the embedding and subsetting restriction information of fonts was added in 2.3.8.

Hinting

Support for applying a special filter to bitmaps generated by 'FT_Render_Glyph' if one of FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V has been selected was added in 2.3.0, while LCD-optimized rendering was disabled in all default builds of the library. LCD filter became normalized and color-balanced in 2.6.2.

TrueType
TrueType bytecode interpreter was turned off in 2.0 Beta 8, and then it was turned off again in 2.0.2. The TrueType bytecode interpreter has been fixed to produce exactly the same output as FreeType 1.x in 2.1.0. The unpatented hinter became default in 2.3.0, which detects the need of the hinter by font name. The ability to detect patented bytecode instructions and toggling of unpatented hinter were added in 2.3.5. TrueType bytecode interpreter is enabled by default in 2.4.0. TrueType subpixel hinting support is implemented in 2.4.11. The subpixel hinting mode in version 40 of the bytecode engine was added in 2.6.4, and was disabled in 2.6.5, then enabled by default in 2.7. The 'GETVARIATION' bytecode operator was implemented in 2.7.
PostScript
PostScript hinter was removed in 2.0.5. A new PostScript hinter was introduced in 2.0.6 to support native hints in PostScript Type 1, PostScript CID, and CFF/CEF. Hinting engine was updated in 2.1.3. New CFF parsing and hinting engine by Dave Arnold was introduced in 2.4.12. 2.5.0.1 enables this by default. Old CFF engine was disabled by default. CFF stem darkening can be configured via 'darkening-parameters' property. CFF Stem darkening behaviour became configurable at build time in 2.5.4.
Auto-hinter
New auto-hinting module was added in 2.0 Beta 8. Hinting engine was updated in 2.1.3. In 2.1.8, autohinting is disabled for glyphs that are vertically distorted or mirrored. Auto-hinter was replaced by auto-fitter in FreeType 2.1.10. A new algorithm for CJK fonts was introduced in FreeType 2.2, based on Akito Hirai's patch. It only works for fonts with a Unicode character map. Improved support for serifs, corner cases, and spacing adjustments were introduced in 2.3.2. When computing blue zones, single-point contours are ignored in 2.3.3. In 2.3.5, default hinter for non-Latin scripts was switched to CJK hinting module. In 2.4.5, if automatic hinting is not explicitly disabled, Auto-hinter is used if a TrueType-based font doesn't contain native hints. In 2.5.1, Auto-hinter rendering for TrueType fonts was improved, especially in the range 20-40ppem. Support of HarfBuzz library 0.9.19 or newer was added in 2.5.3. Auto-hinting was added to Devanagari and Telugu (experimental) scripts in 2.5.4. Auto-hinting was added to Arabic and Thai scripts in 2.6. Auto-hinting was added to Lao script, with Arabic script support being enhanced in 2.6.1. Stem darkening was added in 2.6.2 but disabled by default. Auto-hinting was added to Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Malayalam, Sinhala, Tamil scripts in 2.6.4.

File formats

Adobe's new SING Glyphlet format was introduced in FreeType 2.2.

BDF
Support of BDF format was added in 2.1.1, which includes support of anti-aliased bitmaps. Added support of retrieve BDF properties in 2.1.4-rc1. Added support of SETWIDTH_NAME and ADD_STYLE_NAME properties in 2.1.8. In 2.1.9, the DEFAULT_CHAR property (if available) is used to select a glyph shape for the undefined glyph. In 2.1.10, FT_Set_Pixel_Sizes and FT_Set_Char_Size were changed to select the font's actual font dimensions and 'nominal' size respectively, with the width parameter being ignored; BDF driver no longer converts all returned bitmaps with a depth of 2bpp or 4bpp to a depth of 8bpp. Support for the whole Unicode encoding range was added in 2.4.9.
PCF
Native support of gzip-compressed font files was added in 2.1.3. Added support of retrieve PCF properties in 2.1.4-rc1. In 2.2.8, added support of SETWIDTH_NAME and ADD_STYLE_NAME properties, and bitmap fonts compressed with the LZW algorithm. In 2.1.10, FT_Set_Pixel_Sizes and FT_Set_Char_Size were changed to select the font's actual font dimensions and 'nominal' size respectively, with the width parameter being ignored.
Portable Font Resource (PFR)
Embedded bitmaps are supported and returns correct kerning metrics for all glyphs in 2.1.3. Ability to return the font family and style names when they're available was added in 2.1.4-rc2.
PostScript
CID and CFF/Type2/CEF drivers were added in 2.0 Beta 8. Improved support for synthetic (transformed) fonts was added in 2.0.2. Type 42 font driver was added in 2.1.1. Support of CFF fonts containing a subset of their reference charset was added in 2.1.4-rc1. In 2.1.8, added support of hexadecimal format of data after the `StartData' command in CID-keyed Type 1 fonts, and embedded bitmaps in SFNT-based CFF fonts. Access to CID registry ordering supplement was added in 2.3.6. Access CID-keyed CFF fonts via CID values via 'FT_Get_CID_Is_Internally_CID_keyed' and 'FT_Get_CID_From_Glyph_Index' were added in 2.3.9. Retrieving dictionary keys in Type 1 fonts via new 'FT_Get_PS_Font_Value' API was added in 2.4.8. CFF engine supports all Type 2 operators except 'random' in 2.6.3. Track kerning support for AFM file is added in FreeType 2.2.
TrueType/OpenType
Support of OpenType 1.3 formats 8, 10, 12 was added in 2.0.5. Support of TrueType or OpenType fonts embedded in PDF documents without 'cmap', 'post' and 'name' was added in 2.0.8. Support of fonts with broken name tables with invalid entries and wild offsets was added in 2.0.9. Support certain 'broken' fonts that load under Windows without problems in 2.1.3. Support for TrueType tables without a 'hmtx' table when using incremental interface was added in 2.1.4-rc1, and the depth of composite glyphs is limited. Support for tables 'avar', 'cvar', 'fvar', and 'gvar' was added in 2.1.9. Setting family and style in SFNT fonts is handled by TT_NAME_ID_PREFERRED_FAMILY and TT_NAME_ID_PREFERRED_SUBFAMILY strings in 2.1.10. In 2.1.10, FT_Sfnt_Table_Info API was added to retrieve name and size information of SFNT tables, and API FT_OpenType_Validate was added to validate OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF). Bit 1 in the 'head' table of TrueType fonts is supported in FreeType 2.2. Support of loading TrueType name encoded in UTF-16 was added in 2.3.0, and TrueTypeGX validator (gxvalid) started checking the order of glyph IDs in the kern table. Microsoft Unicode cmaps in TrueType fonts became preferred over Apple cmaps by default in 2.3.6. 'MATH' OpenType table validation and cmap 14 support were added in 2.3.6. Ability to pass the dropout mode to the B&W rasterizer was added in 2.3.7. Experimental Type 1 and CID-keyed Type 1 fonts in an SFNT wrapper was added in 2.3.8 (tables 'TYP1' and 'CID ' are passed to the PS Type 1 and CID-keyed PS font drivers). Support for SFNT cmap 13 table format was added in 2.3.10. Support of TrueType fonts without family name via detection of lengths and checksums of Type42-persistent subtables ('cvt ', 'fpgm', and 'prep') was added in 2.4.4, as well as proper support of UVS (TrueType/OpenType cmap format 14). Support for OpenType collections and CFF fonts within an SFNT wrapper are added in 2.4.11. Support of 'CBDT', 'CBLC' tables (embedded coloured bitmaps) were added in 2.5.0. Support of Apple's 'sbix' color bitmap format, and 'OS/2' SFNT table version 5 were added in 2.5.1. In 2.6, advance widths and side bearing values in CFFs (wrapped in an SFNT structure) are now always taken from the 'hmtx' table, and PostScript font name of a CFF font (wrapped in an SFNT structure) is now always taken from the 'name' table. Support of CFF2 font format from OpenType 1.8 was added in 2.7.1.
Windows raster font (.FON)
Windows FNT/FON driver was added in 2.0 Beta 8. Windows FNT specific API was added in 2.1.4-rc1. Support of Windows raster font files in PE executable format was added in 2.3.5.
WOFF
Support of WOFF font format was added in 2.5.1.

Loader

TrueType name table loader supports 'buggy' Asian fonts was added in 2.1.1, which ignores empty name entries, invalid pointer offsets and a few other incorrect subtleties. In addition, name strings are now loaded on demand, which reduces the memory load of many faces. Support of managing UCS-4 character codes in CMap cache was added in 2.1.4-rc2. In 2.1.8, support of deinstallation of faces, delete all 'idle' nodes that correspond to a given FTC_FaceID. In the Type 1 loader, top-level dictionaries was properly skipped in 2.3.0 Ability to use fractional pixel sizes in the cache was added in 2.3.5. Ability to extract advance values of glyphs without loading their outlines was added in 2.3.8. Incremental font loading is enabled by default in 2.3.12.

Platforms

AIX
Automatic build on AIX systems was added in 2.0.4.
Amiga
Support for Amiga was added in 2.0.5.
BeOS
BeOS-specific files was added in 2.0.3.
Atari
Support for building FreeType on the 16-bit Atari using the PureC compiler was added in 2.1.8.
EPOC
Support for EPOC was re-added in 2.0.2.
Symbian
Support for Symbian was added in 2.3.6.
Windows
Support for PFR driver with Visual C++ was added in 2.1.2.

Licensing

  • In 2.1.0, FreeType License was updated to include a proposed preferred disclaimer.
  • ftvalid sources, used by ftlayout code, was relicensed to 'Old-Style' MIT licence in 2008-01-03.
  • History

    FreeType was created in 1996 by David Turner to render TrueType fonts, including an interpreter for handling TrueType bytecode. Originally written in the Pascal programming language it was ported in 1997 by Robert Wilhelm to C. Later, Werner Lemberg joined the team who is until today maintainer of Freetype.

    FreeType 1 had support for only the TrueType font format but it included an extension to support OpenType text layout features.

    Major rewrite 2.0

    Version 2.0 of FreeType was announced back in 1998, with development release made available in 1999, and final release available in 2000, providing a complete rewrite to make it modular. FreeType 2 brought support for more font formats and evolved source code which the developers stated was "simpler and more powerful". FreeType 2 is not backward-compatible with FreeType 1 but the developers state that moving from FreeType 1 to FreeType 2 poses little difficulty. As text layout processing was not an objective of FreeType 2, however, the OpenType text layout functionality of FreeType 1 was removed in FreeType 2. A very evolved form of the OpenType text layout functionality of FreeType 1 is used in the Pango text layout library. The HarfBuzz project is further evolving that functionality with a complete rewrite offered as a standalone library with a less restrictive license than Pango's license.

    Patent conflicts

    In 1999, the Freetype project was informed by Apple Incorporated that FreeType was infringing patents related to TrueType font hinting. Following that, Freetype deactivated by default or worked around patent relating technologies. Therefore, several open source projects, such as FreeBSD or Linux, had FreeType included with font hinting functionality disabled or degraded to avoid the issue of software patents held by Apple Inc.

    Since May 2010, all conflicting software patents related to font hinting expired, allowing FreeType's TrueType font hinter to be used in open source. Many of the operating systems which disabled the renderer now give the user the option to enable it. In Fedora, freetype-freeworld was switched from the proprietary yum repository to the free repository.

    CFF engine donation

    In 2013 Adobe donated a CFF rendering engine to the FreeType project which integrated it and made it default with version 2.5.

    Users

    Android
    FreeType is used as font renderer in Android.
    Apple
    Apple uses FreeType in iOS and macOS next to Apple Advanced Typography.
    Java
    In 2007, Sun Microsystems switched from using a proprietary font rasterizer to using FreeType in the OpenJDK Java development kit.
    PlayStation
    Sony ships FreeType with its PlayStation 3, PlayStation 4, and PlayStation Vita consoles.
    ReactOS
    FreeType is used as ReactOS font renderer.

    Other users

    As well as being used by the major free software desktop systems, FreeType has been used as a rasterization engine for modern video games, and Opera for the Wii.

    On Windows, projects like gdipp and MacType aim to override the system renderer with FreeType.

    References

    FreeType Wikipedia