From b9fd445da7c680d8596ff24efbe1b68bb7a4a7f0 Mon Sep 17 00:00:00 2001 From: Anson Date: Mon, 15 Jul 2019 23:00:40 -0700 Subject: [PATCH] preparing code for official release --- LICENSE | 21 +++++++++++++++++++++ README.md | 24 +++++++++++++++++++++++- __init__.py | 1 + bdfparse.py | 12 ++++++++++++ example.png | Bin 0 -> 6872 bytes notebook.py | 39 --------------------------------------- setup.py | 26 ++++++++++++++++++++++++++ 7 files changed, 83 insertions(+), 40 deletions(-) create mode 100644 LICENSE create mode 100644 __init__.py create mode 100644 example.png delete mode 100644 notebook.py create mode 100644 setup.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8a7a627 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Anson Biggs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 06e5d62..2868486 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,24 @@ -# bdf to numpy +# .bdf to NumPy +This project takes a .bdf file and turns it into a [NumPy](https://www.numpy.org/) Array with an intended use with LED matrix displays. My [LED Stock Ticker](https://gitlab.com/them-boys/raspberry-pi-stock-ticker) uses this package. A good list of .bdf files can be found [here](https://github.com/hzeller/rpi-rgb-led-matrix/tree/master/fonts) + +## Usage + +```python +import numpy as np +import matplotlib.pyplot as plt + +font = parse_chars("9x18.bdf") +matrix = font["A"] +text = "nson" + +for letter in text: + matrix = np.concatenate((matrix, font[letter]), axis=1) + +plt.imshow(matrix) +plt.show() +``` + +Which outputs: + +![Example of code output that reads Anson.](example.png) diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..d466adc --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +name = "bdf_to_numpy" diff --git a/bdfparse.py b/bdfparse.py index ae4cf08..44e4a0f 100644 --- a/bdfparse.py +++ b/bdfparse.py @@ -1,4 +1,5 @@ import numpy as np +import matplotlib.pyplot as plt def parse_properties(bdfFile): @@ -176,3 +177,14 @@ def parse_chars(bdfFile): if bdf.readline().startswith("ENDFONT"): return font return font + + +font = parse_chars("9x18.bdf") +matrix = font["A"] +text = "nson" + +for letter in text: + matrix = np.concatenate((matrix, font[letter]), axis=1) + +plt.imshow(matrix) +plt.show() diff --git a/example.png b/example.png new file mode 100644 index 0000000000000000000000000000000000000000..545baf2db57bf1f8f2b6a365d6e5651d0c20a6ea GIT binary patch literal 6872 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 literal 0 HcmV?d00001 diff --git a/notebook.py b/notebook.py deleted file mode 100644 index cc35d5e..0000000 --- a/notebook.py +++ /dev/null @@ -1,39 +0,0 @@ -#%% -import numpy as np -import matplotlib.pyplot as plt - -#%% -hexs = [ - 0x00, - 0x00, - 0x00, - 0x00, - 0x18, - 0x24, - 0x24, - 0x42, - 0x42, - 0x7E, - 0x42, - 0x42, - 0x42, - 0x42, - 0x00, - 0x00, -] -bbx = (8, 16, 0, -2) - -#%% -rows = [] -for row in range(0, bbx[1]): - rows.append(list(f"{hexs[row]:0>42b}")[-(bbx[0] + 1) : -1]) - - -#%% -plt.imshow(np.array(rows, dtype=int)) -plt.show() - -#%% -np.array(rows, dtype=int) - -#%% diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..73d328c --- /dev/null +++ b/setup.py @@ -0,0 +1,26 @@ +# Copyright (c) 2019 albig +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name="bdf-to-numpy", + version="2019.1", + author="Anson Biggs", + author_email="anson@ansonbiggs.com", + description="A package for reading .bdf files into NumPy arrays.", + long_description=long_description, + long_description_content_type="text/markdown", + url="https://gitlab.com/MisterBiggs/bdf-to-numpy", + packages=setuptools.find_packages(), + classifiers=[ + "Programming Language :: Python :: 3.7.3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], +)