Scala Native bindings for FreeType, a freely available software library to render fonts.
Add the dependency to your build.sbt:
libraryDependencies += "io.github.edadma" %%% "freetype" % "0.0.6"
You also need FreeType installed on your system:
# Ubuntu/Debian sudo apt install libfreetype-dev # macOS brew install freetype
import io.github.edadma.freetype.* // Initialize FreeType library val library = initFreeType.getOrElse(sys.error("Failed to init FreeType")) // Load a font face val face = library.newFace("/path/to/font.ttf", 0).getOrElse(sys.error("Failed to load font")) // Set pixel size face.setPixelSizes(0, 24) // Get kerning between two characters (requires setPixelSizes first) val kern = face.getKerning('A', 'V') // Returns scaled value in pixels // Or get unscaled kerning in font design units val kernUnscaled = face.getKerning('A', 'V', KerningMode.UNSCALED) // Load and render a glyph face.loadChar('A'.toLong, 0) face.renderGlyph(RenderMode.NORMAL) // Access bitmap data val bmp = face.bitmap println(s"${bmp.width} x ${bmp.rows}") // Cleanup face.doneFace library.doneFreeType
initFreeType: Either[Int, Library]- Initialize FreeTypeLibrary.doneFreeType: Int- CleanupLibrary.newFace(path: String, faceIndex: Long): Either[Int, Face]- Load a font
Face.setPixelSizes(width: Int, height: Int): Int- Set pixel sizeFace.loadChar(charCode: Long, loadFlags: Int): Int- Load a glyphFace.renderGlyph(mode: RenderMode): Int- Render loaded glyphFace.bitmap: Bitmap- Access rendered bitmapFace.getCharIndex(charcode: Long): Int- Get glyph index for characterFace.getKerning(left: Char, right: Char, mode: KerningMode): Double- Get kerning
RenderMode: NORMAL, LIGHT, MONO, LCD, LCD_V, SDF, MAXKerningMode: DEFAULT (scaled, grid-fitted), UNFITTED (scaled), UNSCALED (font units)
ISC