Skip to main content

A library for manipulating Glyph Bitmap Distribution Format (BDF) Fonts.

Project description

BdfFont

Python PyPI

BdfFont is a library for manipulating Glyph Bitmap Distribution Format (BDF) Fonts.

Installation

pip install bdffont

Usage

Load

import os
import shutil

from bdffont import BdfFont
from examples import assets_dir, build_dir


def main():
    outputs_dir = os.path.join(build_dir, 'load')
    if os.path.exists(outputs_dir):
        shutil.rmtree(outputs_dir)
    os.makedirs(outputs_dir)

    font = BdfFont.load(os.path.join(assets_dir, 'unifont', 'unifont-15.1.05.bdf'))
    print(f'name: {font.name}')
    print(f'size: {font.point_size}')
    print(f'ascent: {font.properties.font_ascent}')
    print(f'descent: {font.properties.font_descent}')
    print()
    for glyph in font.glyphs:
        print(f'char: {chr(glyph.code_point)} ({glyph.code_point:04X})')
        print(f'glyph_name: {glyph.name}')
        print(f'advance_width: {glyph.device_width_x}')
        print(f'offset: {glyph.bounding_box_offset}')
        for bitmap_row in glyph.bitmap:
            text = ''.join(map(str, bitmap_row)).replace('0', '  ').replace('1', '██')
            print(f'{text}*')
        print()
    font.save(os.path.join(outputs_dir, 'unifont-15.0.01.bdf'))


if __name__ == '__main__':
    main()

Create

import os
import shutil

from bdffont import BdfFont, BdfGlyph
from examples import build_dir


def main():
    outputs_dir = os.path.join(build_dir, 'create')
    if os.path.exists(outputs_dir):
        shutil.rmtree(outputs_dir)
    os.makedirs(outputs_dir)

    font = BdfFont()

    font.point_size = 16
    font.resolution_xy = 75, 75
    font.bounding_box_size = 16, 16
    font.bounding_box_offset = 0, -2

    font.glyphs.append(BdfGlyph(
        name='A',
        code_point=ord('A'),
        scalable_width=(500, 0),
        device_width=(8, 0),
        bounding_box_size=(8, 16),
        bounding_box_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],
        ],
    ))

    font.properties.foundry = 'Pixel Font Studio'
    font.properties.family_name = 'Demo Pixel'
    font.properties.weight_name = 'Medium'
    font.properties.slant = 'R'
    font.properties.setwidth_name = 'Normal'
    font.properties.add_style_name = 'Sans Serif'
    font.properties.pixel_size = font.point_size
    font.properties.point_size = font.point_size * 10
    font.properties.resolution_x = font.resolution_x
    font.properties.resolution_y = font.resolution_y
    font.properties.spacing = 'P'
    font.properties.average_width = round(sum([glyph.device_width_x * 10 for glyph in font.glyphs]) / len(font.glyphs))
    font.properties.charset_registry = 'ISO10646'
    font.properties.charset_encoding = '1'
    font.generate_name_as_xlfd()

    font.properties.default_char = -1
    font.properties.font_ascent = 14
    font.properties.font_descent = 2
    font.properties.x_height = 5
    font.properties.cap_height = 7

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

    font.save(os.path.join(outputs_dir, 'my-font.bdf'))


if __name__ == '__main__':
    main()

Test Fonts

References

License

Under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bdffont-0.0.20.tar.gz (1.8 MB view details)

Uploaded Source

Built Distribution

bdffont-0.0.20-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file bdffont-0.0.20.tar.gz.

File metadata

  • Download URL: bdffont-0.0.20.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for bdffont-0.0.20.tar.gz
Algorithm Hash digest
SHA256 4f4813b6e76c6662f4559ddadfe0bfbfe7560306d75207f43c474db64c5644ec
MD5 7460da224879f4932d3aa844608e9cae
BLAKE2b-256 58810024bdbea1bde00dfb3fe601d4a31675404acfdc373e0b382a2ce5ff0d9c

See more details on using hashes here.

Provenance

File details

Details for the file bdffont-0.0.20-py3-none-any.whl.

File metadata

  • Download URL: bdffont-0.0.20-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for bdffont-0.0.20-py3-none-any.whl
Algorithm Hash digest
SHA256 b2346e2b0e2dcb0ea0a5b32bd81472388e90d4d228ccd03be488f3291ebd6cdc
MD5 f63b01f886926cdc91623c19b284c3b6
BLAKE2b-256 8c63cd1dccc0516ed602cde0ec119039300d55386a552d141f2ba1fed03b8bfa

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page