Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

TakWolf/pcffont-python

Repository files navigation

PcfFont.Python

PcfFont is a library for manipulating Portable Compiled Format (PCF) Fonts.

Installation

pip install pcffont

Usage

Create

import shutil
import statistics

from examples import build_dir
from pcffont import PcfFontBuilder, PcfGlyph


def main():
outputs_dir = build_dir.joinpath('create')
if outputs_dir.exists():
shutil.rmtree(outputs_dir)
outputs_dir.mkdir(parents=True)

builder = PcfFontBuilder()
builder.config.font_ascent = 14
builder.config.font_descent = 2

builder.glyphs.append(PcfGlyph(
name='A',
encoding=65,
scalable_width=500,
character_width=8,
dimensions=(8, 16),
offset=(0, -2),
bitmap=[
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 1, 0, 0],
[0, 0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
],
))

builder.properties.foundry = 'Pixel Font Studio'
builder.properties.family_name = 'My Font'
builder.properties.weight_name = 'Medium'
builder.properties.slant = 'R'
builder.properties.setwidth_name = 'Normal'
builder.properties.add_style_name = 'Sans Serif'
builder.properties.pixel_size = 16
builder.properties.point_size = builder.properties.pixel_size * 10
builder.properties.resolution_x = 75
builder.properties.resolution_y = 75
builder.properties.spacing = 'P'
builder.properties.average_width = round(statistics.fmean(glyph.character_width * 10 for glyph in builder.glyphs))
builder.properties.charset_registry = 'ISO10646'
builder.properties.charset_encoding = '1'
builder.properties.generate_xlfd()

builder.properties.x_height = 7
builder.properties.cap_height = 10
builder.properties.underline_position = -2
builder.properties.underline_thickness = 1

builder.properties.font_version = '1.0.0'
builder.properties.copyright = 'Copyright (c) TakWolf'

builder.save(outputs_dir.joinpath('my-font.pcf'))


if __name__ == '__main__':
main()

Load

import shutil

from examples import assets_dir, build_dir
from pcffont import PcfFont


def main():
outputs_dir = build_dir.joinpath('load')
if outputs_dir.exists():
shutil.rmtree(outputs_dir)
outputs_dir.mkdir(parents=True)

font = PcfFont.load(assets_dir.joinpath('unifont', 'unifont-17.0.03.pcf'))
print(f'name: {font.properties.font}')
print(f'size: {font.properties.pixel_size}')
print(f'ascent: {font.accelerators.font_ascent}')
print(f'descent: {font.accelerators.font_descent}')
print()
for encoding, glyph_index in sorted(font.bdf_encodings.items()):
glyph_name = font.glyph_names[glyph_index]
metric = font.metrics[glyph_index]
bitmap = font.bitmaps[glyph_index]
print(f'char: {chr(encoding)} ({encoding:04X})')
print(f'glyph_name: {glyph_name}')
print(f'advance_width: {metric.character_width}')
print(f'dimensions: {metric.dimensions}')
print(f'offset: {metric.offset}')
for bitmap_row in bitmap:
text = ''.join(' ' if color == 0 else '##' for color in bitmap_row)
print(f'{text}*')
print()
font.save(outputs_dir.joinpath('unifont-17.0.03.pcf'))


if __name__ == '__main__':
main()

References

License

MIT License

About

A library for manipulating Portable Compiled Format (PCF) Fonts

Topics

Resources

Readme

License

MIT license

Stars

Watchers

Forks

Contributors

Languages