From 54c3de4f6ad5366ed23683faf7db5e8005072b73 Mon Sep 17 00:00:00 2001 From: thenatespack Date: Mon, 10 Nov 2025 17:42:05 -0700 Subject: [PATCH] basic python script and font --- README.md | 25 +++- font_to_binary.py | 87 +++++++++++++ raster-forge-font/.DS_Store | Bin 0 -> 8196 bytes .../RasterForgeRegular-JpBgm.ttf | Bin 0 -> 26936 bytes .../RasterForgeRegular-JpBgm_binary.bin | Bin 0 -> 32768 bytes raster-forge-font/info.txt | 2 + raster-forge-font/misc/GGBotNet-ca0d.url | 6 + raster-forge-font/misc/License-473a.txt | 121 ++++++++++++++++++ 8 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 font_to_binary.py create mode 100644 raster-forge-font/.DS_Store create mode 100644 raster-forge-font/RasterForgeRegular-JpBgm.ttf create mode 100644 raster-forge-font/RasterForgeRegular-JpBgm_binary.bin create mode 100644 raster-forge-font/info.txt create mode 100644 raster-forge-font/misc/GGBotNet-ca0d.url create mode 100644 raster-forge-font/misc/License-473a.txt diff --git a/README.md b/README.md index 9a4524e..2a39b06 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,25 @@ -# ttf_to_binary_font +# Font to Binary Conversion Script +This script uses the following libraries: + +- **Pillow** (a fork of PIL): to load and manipulate the font image +- **numpy**: to convert glyph images to binary arrays + +## Script Functionality + +The script performs the following steps: + +1. Extracts the glyphs from the input TrueType font file using Pillow's `ImageFont` class. +2. Creates a binary representation of each glyph by converting it to an array and packing it into bytes using `struct.pack`. +3. Saves the binary font data to a file named after the input font file but with `_binary.bin` appended (e.g., `arial.ttf_binary.bin`). +4. Generates a `README.md` file describing the parameters used for generating the binary font and the output files produced. + +## Usage + +Run the script from the command line as follows: +```bash + python font_to_binary.py your_font_file.ttf out.h +``` + +Replace `your_font_file.ttf` with the path to your TrueType font file (for example, `arial.ttf`). +Replace `out.h` with the path to your TrueType font file (for example, `font_map.h`). diff --git a/font_to_binary.py b/font_to_binary.py new file mode 100644 index 0000000..8debd93 --- /dev/null +++ b/font_to_binary.py @@ -0,0 +1,87 @@ +import sys +from PIL import Image, ImageDraw, ImageFont + +FONT_SIZE = 16 # 16x16 pixels + +def render_glyph(font, char): + """Render a single character into a 16x16 monochrome bitmap.""" + img = Image.new('1', (FONT_SIZE, FONT_SIZE), 0) + draw = ImageDraw.Draw(img) + + # Get bounding box + bbox = draw.textbbox((0, 0), char, font=font) + w = bbox[2] - bbox[0] + h = bbox[3] - bbox[1] + + # Draw character centered + draw.text( + ((FONT_SIZE - w) // 2 - bbox[0], (FONT_SIZE - h) // 2 - bbox[1]), + char, + fill=1, + font=font + ) + + # Convert to 16x16 bitmap (list of 0/1) + bitmap = [[img.getpixel((x, y)) for x in range(FONT_SIZE)] for y in range(FONT_SIZE)] + return bitmap + +def bitmap_to_c_array(char, bitmap): + """Convert 16x16 bitmap to a C-style uint8_t array with binary literals.""" + lines = [] + for row in bitmap: + high = row[:8] + low = row[8:] + high_val = "0b" + "".join(str(b) for b in high) + low_val = "0b" + "".join(str(b) for b in low) + lines.append(f"{high_val}, {low_val}, // " + "".join("*" if b else " " for b in row)) + + # Use ASCII code for special characters to avoid invalid variable names + if char.isalnum(): + array_name = f"letter_{char}_16x16" + else: + array_name = f"letter_{ord(char)}_16x16" + c_code = f"static const uint8_t {array_name}[32] = {{\n " + "\n ".join(lines) + "\n};" + return array_name, c_code + +def main(ttf_path, output_file): + font = ImageFont.truetype(ttf_path, FONT_SIZE) + + # Characters to include + letters_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + letters_lower = "abcdefghijklmnopqrstuvwxyz" + digits = "0123456789" + specials = "!@#$%^&*()-_=+[]{};:'\",.<>/?\\|`~ " + + all_chars = letters_upper + letters_lower + digits + specials + array_names = [] + + with open(output_file, "w") as f: + for char in all_chars: + bitmap = render_glyph(font, char) + array_name, c_array = bitmap_to_c_array(char, bitmap) + array_names.append(array_name) + f.write(f"// Character '{char}' (ASCII {ord(char)})\n") + f.write(c_array + "\n\n") + + # Generate pointer array + f.write("// Font bitmaps array\n") + f.write(f"static const uint8_t *font_bitmaps_16x16[{len(array_names)}] = {{\n ") + f.write(", ".join(array_names)) + f.write("\n};\n\n") + + # Generate FontPack structure + f.write("// Font pack structure\n") + f.write("typedef struct {\n const uint8_t **bitmaps;\n} FontPack;\n\n") + f.write("const FontPack basic_font_pack = {\n") + f.write(" .bitmaps = {\n " + ", ".join(array_names) + "\n }\n};\n") + + print(f"C arrays and FontPack structure written to {output_file}") + +if __name__ == "__main__": + if len(sys.argv) < 3: + print("Usage: python font_to_binary.py path/to/font.ttf output_file") + sys.exit(1) + + ttf_path = sys.argv[1] + output_file = sys.argv[2] + main(ttf_path, output_file) diff --git a/raster-forge-font/.DS_Store b/raster-forge-font/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8886aab4c98e69d483a1235d957c7db9bb748674 GIT binary patch literal 8196 zcmeHLYitx%6u#fI&>1_xv=%7HX1A1Au-FzV+a6bj!b9j&g_;) zYHExRjETlq;xFR!XQM`g#-QjQO+<~RA(2F4)I|8>FaBTxdhXoWrUmLBMTyQ$=AL`b zx#!HBGvB#)?l8uX$m#WrRWin8x;WKJsk=_&dVXEgq(H)zAbXY`c8AiIlP3PeHM2uO zn1L_@VFtnsgc%4ka5H3p_H5qdY4&}g4f`+yVFvz}8Q|+fj4n>&0UZ_8UplDsj{roA zN$fWoYkWX77SMP=M+GGfH3(Cp!W6*~1Hzo-v0z?2pre8cbB5sXf#A*vPAKs2PX1&5 zbcVQ~VIO87%)qr7;AK($krfmBpHV`fQ-Qc_y7KRMtGC%u%H za}%lTKF+l}j+HKqQ|Y~?G2EwBG&{DJGHoO48<@I5Q+hj1TX%*NPR`a{-!>@}iXtn0 z+WezO8`sv=#MU;B)WnW9HZ;`4)-|pf8Byf9)wLV<^c}PYZRePX0KqE2W?dE0Qo7*xg;8amXt;nxg9J zah^tkzw47_~G02yhH(JOexhm&(+cm`9xOlMva+7A*kglU7iR@QW-!%C$MONiF18)a>$(wP^L3t@$N zx2$y0+a07}Tp>$DT4e2W`F?)m)|Bh*8Zzv{BPAl+Wx2;4NM(&(!-UI%MXN0PFP7xo zWQ%TkPS(%Hy;YG&H+R*f>xNE2FRWZp9!W+zWbIqB(M&sUQYFy45CtJuix3~*VawP$+Fje(0p_qr*wgGddzYPLAF(gl8Fr5S%zkB;*l+AI zyMiL9D90i!!79|E4)xf8jo5_E*ok&@U@y`*2n#kGco@OM7{w!a9M9lcJcsA;GG4`N zcmr=@3@7kDKES8=0;lm6zQ#HHg7dh5i@1y{_+2WK7D`K`rP4B~R;rU$OKYU9(l%+g z)Gei@erZ5NAQj4R|J2B&!^BUlDwdlM{t8NC*Dtl`w(UFaQCn~NQu}T;FRoiF=FXcR zTe`BgVcn*t2?z?r7C<@~{65~NREdvw9}`z&RaBuG?Vy4%4oz2#S_v;)d7RI#TC7I3 z8B{WYUACOqnN%)Q1NZ=tRWTwvwnlBYQYI{{Z%XtZ`VsIKKDERBKivNbyZ?#({|{Zir~&{0 literal 0 HcmV?d00001 diff --git a/raster-forge-font/RasterForgeRegular-JpBgm.ttf b/raster-forge-font/RasterForgeRegular-JpBgm.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d809828d433c14ec12f9a6c9e9632ee1b89cdc5 GIT binary patch literal 26936 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 izUYHnH*eY$b$9l3cW#Wwf`|vJgoC literal 0 HcmV?d00001 diff --git a/raster-forge-font/RasterForgeRegular-JpBgm_binary.bin b/raster-forge-font/RasterForgeRegular-JpBgm_binary.bin new file mode 100644 index 0000000000000000000000000000000000000000..84b168657800eda1f30c969d8fa539f08aeb5660 GIT binary patch literal 32768 zcmeI3!E)nB3`70@Kb>)odT{9#swG*PFndCS1W0tplgaMBUh_2xOaha@Brpj~0+YZb zFbPZolfWb}2}}Z$z_|(hlwX{N?c@#ry!QXG{$(Eau}{gLJx|OBL*r5YVm&eId0mJn z%Jl#O;a~FVhXTlRJyf3nF#z{BygD%TLl5(jkN!3y=!YJ84A9y|J@qjF?0%wu^+5bV zuewD));)f|aNHiypLkpS1%wOWe8lyHrGEIKzx7u=>H|lAJ;3%mO!W@-Z~eHQ_Orn- z_uIx3e_orM@tof<^;l0{G54iliPaAUln0$q=FNuv6Z#X&^|QSG{0;#*;5IBLZ?cpmdc*7|j()j+(9y035CDAfJ*b`(*uKV#ywdf4XaH2dD1gA(`>KCjFa{Jp=rF_q z*za{&5>AMz(3{WNGX z`~X`utv`Hzb=(%jesQp^KODi2d9=8luhqBu*5BT<`XRs8-}GC4{L2Jze|6sIFWu+w zUlN$z2fu$sE@;zl`7n@!R^RHyE@;zh`7n@!R^RHyE@^!Knm+lbzdz2;{S31|1KvL| z{g&T%`@oj>PX*3L-f;9|p2*jDGXzin7RP+hH+Z!l=V|?|p8AGW5BIJ0W(Z#O;E(oY zNdFLoKkJF3-wvS9_e`36VDkgd`H#l13rIiR2Z2O?ILHC@Fo1LqJqb(#lfWb}2}}Z$ zz$7pUOaha@Brpj~0+YZbAPLy-Z^#=KJE!^kATtDyUmw-~KNR~RkLmJX-}-{v3JTKS zaP)8G71@3iht2K<>Z&d4Tn{?FV}t*$X4z zO#rj}c?5E{&oa+}1e0F&AAxHVkPGDNHjL-G{QI%9!?1l?zMdEPw|=az{ioqiCxGYo zn+1;e!dfix!tG-BtGCTCuz#H{`qN-eZk+(`uf2b(zxD1j+$4ba&p_;b8&AE#H%mb7 zzx{cD^|tK?dmPydBVSGcH_jXCQ2;;kE#^FeNw;=W|K$Ya0{Q+7<2BCT|G#{_X8#Y3 CKI*#w literal 0 HcmV?d00001 diff --git a/raster-forge-font/info.txt b/raster-forge-font/info.txt new file mode 100644 index 0000000..62638b2 --- /dev/null +++ b/raster-forge-font/info.txt @@ -0,0 +1,2 @@ +license: Public Domain +link: https://www.fontspace.com/raster-forge-font-f135159 \ No newline at end of file diff --git a/raster-forge-font/misc/GGBotNet-ca0d.url b/raster-forge-font/misc/GGBotNet-ca0d.url new file mode 100644 index 0000000..4959776 --- /dev/null +++ b/raster-forge-font/misc/GGBotNet-ca0d.url @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=https://www.ggbot.net/ +IDList= +HotKey=0 +IconFile=C:\Users\SP700\AppData\Local\Mozilla\Firefox\Profiles\tlgohe1j.default-release-1686839021344\shortcutCache\V3OJf0WjaJbbl2w8qYtwsQ==.ico +IconIndex=0 diff --git a/raster-forge-font/misc/License-473a.txt b/raster-forge-font/misc/License-473a.txt new file mode 100644 index 0000000..354f1e0 --- /dev/null +++ b/raster-forge-font/misc/License-473a.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work.