Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
vfontas(1)			    hxtools			    vfontas(1)

       vfontas -- a bitmap font	file transformation utility

       vfontas commands...


       -canvas xsize ysize


       -crop xpos ypos width height







       -loadbdf	ff.bdf

       -loadclt	directory/

       -loadfnt	mu.fnt

       -loadhex	unicode.hex

       -loadmap	cp437AB.uni

       -loadpsf	ter-v32b.psfu

       -savebdf	out.bdf

       -saveclt	outdir/

       -savefnt	x.fnt

       -saven1 new.sfd

       -saven2 new.sfd

       -savepbm	outdir/

       -savepsf	new.psfu

       -savesfd	new.sfd


       -setname	name

       -setprop	key value

       -upscale	xscale yscale

       -xcpi ega437.cpi	outdir/

       -xlat xoffset yoffset

       vfontas	(originally  "VGA  font	file assembler") can read/write	bitmap
       fonts from/to a number of formats and transform the glyphs  in  various
       ways. vfontas is	able to	generate a vector format.

       vfontas	does  not  have	a direct integration of	or with	FontForge, but
       thanks to the BDF read/write support on both sides,  fonts  in  formats
       like  FNT  and  PSF can be made available to FontForge by vfontas, and,
       conversely, fonts in formats like FON and TTF can be made available  to
       vfontas by FF.

       With its	own CLT	format,	vfontas	makes glyphs in	a textgraphical	format
       to facilitate editing with plain-text screen editors such as vi,	 nano,

Aspect ratio
       CRT  screens of the time	commonly had an	aspect ratio of	4:3, and what-
       ever resolution was shown would be squeezed  into  that	frame,	poten-
       tially  making  the  pixels non-square. This means that bitmap fonts of
       the time	will need a corrective factor for modern display  hardware  to
       be reproduced faithfully. This correction can happen either during con-
       version (vfontas	has no support for this	at present), or	at the time of
       rendering.  The	font can either	be stretched in	the vertical direction
       or compressed in	the horizontal by using	the reciprocal.

       |Text res | Char	size | Resolution | VStretch	 |
       |80x25	 | 9x14	     | 720x350	  | 54/35 = 1.54 |
       |40x25	 | 8x8	     | 320x200	  | 6/5	= 1.2	 |
       |80x25	 | 8x8	     | 640x200	  | 12/5 = 2.4	 |
       |80x25	 | 8x14	     | 640x350	  | 48/35 = 1.37 |
       |80x43	 | 8x8	     | 640x350	  | 48/35 = 1.37 |
       |80x25	 | 9x16	     | 720x400	  | 27/20 = 1.35 |
       |80x30	 | 8x16	     | 640x480	  | 1.0		 |
       |80x50	 | 9x8	     | 720x400	  | 27/20 = 1.35 |
       |	 |	     | x*y	  | x*y/3*4	 |
       Initializes the memory buffer with 256 empty 8x16 glyphs.  The  primary
       purpose	for  this  is  with saveclt to get blank glyph files for hand-
       editing.	For a differently-sized	canvas,	combine	with -crop or -canvas.

       Enlarges	the glyph box to the specified size. (It never shrinks it.)

       Discards	the in-memory glyph index <-> Unicode mapping table.

       Removes an outer	area from the glyph images, shrinking the image	in the

   fliph, flipv
       Mirrors/flips glyphs.

       Applies	a  "Line  Graphics Enable" transformation on glyphs. It	copies
       the pixels in the second	rightmost column to the	rightmost column,  and
       does  this  for glyph indices 0xC0 to 0xDF. In other words, the useful-
       ness of the -lge	command	is more	or less	limited	 to  DOS  fonts	 which
       have graphic characters in exactly those	indices.

       Applies LGE on the graphic glyphs that are in cp437 and other DOS code-
       pages. It does this for unicode codepoints rather than  glyph  indices.
       This is suitable	for all	kinds of font formats, but do make sure	a Uni-
       code table is present. (BDF and PSF come	with a table, .fnt  does  not,
       so use -loadmap before -lgeu).

       Applies	LGE  on	all glyphs from	U+2500 thru U+25FF (Unicode "box draw-
       ing" and	"box elements" classes), with special handling for the	shades
       at  U+2591 thru U+2593. This is provided	as an alternative to the "true
       DOS look" that lge/lgeu would make.

       Reads a BDF (Adobe Glyph	Bitmap Distribution Format) font file.

       Reads a directory full of CLT files containing glyphs. CLT is  a	 text-
       graphical  format to facilitate visual editing with a text console edi-

       Reads  a	 headerless  bitmap  font  file,   as	typically   used   for
       CGA/EGA/VGA/MDA	hardware, from the specified file into memory. 8x8x256
       (width/height/glyphs), 8x12x256,	8x14x256, 8x16x256  and	 8x16x512  are

       Reads  a	 headerless bitmap font	file, using the	specified height N and
       width 8.	 The number of characters is then autoderived from  the	 file-

       Reads a Unifont .hex encoded file.

       Reads  a	 glyphindex <->	Unicode	codepoint mapping table	from the given
       file   into   memory.   The    format	follows	   the	  maps	  from
       /usr/share/kbd/unimaps,	that is, "0x00 U+0000" at its simplest.	Multi-
       ple U+ codepoints can be	specified in a line.  -loadmap does not	 clear
       the  mapping  table,  which makes it possible to	cumulate mappings from
       multiple	files.

       Reads a PC Screen Font PSF 2 version 0. If the psf file	comes  with  a
       mapping	table,	the  current in-memory table will be discarded and re-
       placed with the one from	the PSF.

       Saves the font to a Glyph Bitmap	Distribution Format file  (BDF).  This
       type  of	 file  can  be	processed  further  by	other  tools  such  as
       bdftopcf(1) or fontforge(1) to, for example, turn  them	into  Portable
       Compiled	 Format	 (PCF)	or TrueType/OpenType (TTF/OTF) files. (See the
       "Examples" section.)

       Saves the current in-memory glyphs as multiple CLT files	to  the	 given
       directory.  CLT	is a textgraphical format to facilitate	visual editing
       with a text console editor.

       Saves the current in-memory glyphs to the given file, using the header-
       less format.

       Saves the current in-memory Unicode mapping table to the	given file.

       N1  was	an experiment to try and model the "diagonalization idea" (cf.
       -saven2)	by analyzing the original glyph	bitmap.	Its  defining  charac-
       teristic	 is  a	lookaround  window  of	3x3 pixels, whose contents are
       mapped to a set of triangles. N1	has some drawbacks over	the newer N2:

       o   N1 adds diagonals on	single-pixel protrusions (e.g. the left	end of
	   the	horizontal bar in an 'f' in certain fonts). This is definitely
	   not fixable with a 3x3 window and would require using 5x5.

       o   N1 adds triangles between pixels that do not	necessarily belong to-
	   gether,  such  as  in  spirals like U+0040 or jampacked glyphs like
	   U+20A7. N2 operates on edges	and knows their	direction, and	avoids
	   making connections to "pixel	islands" at certain angles.

       Similar	to  -savesfd, this produces an SFD file, but uses an alternate
       vectorizer (aptly named "N2"), which smoothens the jagged  edges	 of  a
       bitmap font.

       The  N2	vectorizer  is able to recognize the "stair" pattern of	pixels
       and transform these sections to 45-degree angles. This  diagonalization
       was  originally employed	by Arto	HatanpAxAx (possibly in	a long session
       of manual work) for the "Nouveau	IBM" and "Nouveau IBM Stretch"	vector
       font versions of	the IBM	VGA 9x16 ROM font.

       The defining characteristic of N2 is that it analyzes glyph edges (sim-
       ilar to those produced by -savesfd) using a lookaround window of	7 edge
       segments,  which	 is  used  to work on areas of effectively 5x5 pixels.
       When a 90/270 corner is found, it will be transformed by	adding	diago-
       nal edges.

       In comparison to	other scalers,

       o   xBRZ	 erroneously  round  the  ends of strokes (e.g.	the '-'	dash),
	   N1/N2 does not.

       o   While xBRZ is a bitmap-to-bitmap procedure (also limited to 6x mag-
	   nification as of writing), N1/N2 converts to	vector.

       o   Autotrace/Potrace  just  is not targeted for	low resolution sources
	   (as 8x16 bitmap fonts are). Either it will convert the  bitmap  1:1
	   with	 jagged	 edges,	 or turn it into three or so beziers, which is
	   not nearly enough for '&'.

       o   N1/N2 is only specified for monochrome input.

       Saves the current in-memory glyphs as a PC  Screen  Font	 PSF2.0	 file,
       which can then be loaded	into a Linux text console with setfont(1). The
       in-memory Unicode mapping table is added	to the PSF.

       Saves the font to a Spline Font Database	file (SFD). This type of  file
       can  be	processed further by fontforge(1). A fairly trivial vectorizer
       is used that maps each pixels to	a square  and  then  collapses	shared
       edges  between  those to	reduce the number of polygons fontforge	has to

       For BDF/SFD output: Declare the font as being bold.

       Sets a name for the font, which gets emitted for	BDF/SFD	 output.  (The
       other  file  formats have no metadata field for a name, so the filename
       is all you get.)

       Sets a specific property	for SFD	fonts (also partly used	by BDF).

       Performs	a linear upscale by an integral	factor for all glyphs.

       Extracts	a multi-font .cpi file (as was typically used on DOS) as sepa-
       rate  .fnt  files into the specified directory. This operation does not
       touch the in-memory glyph buffers or Unicode mapping table.

       Moves all glyphs	around within their canvases by	the specified  amount.
       vfontas's  coordinate  system  has (0,0)	in the upper left corner, with
       positive	x going	to the right, and positive y going down.

Known limits
       The Linux kernel	accepts	console	font glyphs of at most 32x32 in	size.

The Consoleet bitmap format
       The Consoleet text bitmap format	is very	similar	to PBM itself. Instead
       of  "P1"	as in PBM, a CLT file begins with "PCLT" on the	first line. In
       the second line,	width and height of the	bitmap	in  pixels  is	given.
       What  follow is the bitmap data:	Each "off" pixel is represented	by the
       2-character string ".." Each "on" pixel is represented by the 2-charac-
       ter "##". Each row of pixels is terminated by a newline,	like in	PBM.

					 9 7

       Decompose  a classic file into editable pictograph text files (with the
       help of a Unicode map):

	   mkdir mu; vfontas -loadfnt /usr/share/kbd/consolefonts/mu.fnt -loadmap
	   /usr/share/kbd/unimaps/cp437.uni -saveclt mu/

       To convert a .fnt and scale it up to make it comfortably	usable with  a
       FullHD resolution Linux fbconsole:

	   vfontas -loadfnt mu.fnt -loadmap cp437.uni -canvas 9	16 -lge	-upscale 2 2
	   -savepsf mu.psf

       To  convert a .fnt to TrueType/OpenType/WOFF (the Fontforge part	is un-
       fortunately manual):

	   vfontas -loadfnt mux.fnt -loadmap cp437AB.uni -canvas 9 16 -lge -savesfd
	   mux.sfd # &&	fontforge mux.sfd

       To convert a .fnt for use under X11 and XTerm (generates	sizes  12,  24
       and 36, @96dpi):

	   for i in 1 2	3; do vfontas -loadfnt mux.fnt -loadmap	cp437AB.uni -canvas 9
	   16 -lge -upscale $i $i -setname Mux -savebdf	| bdftopcf | gzip
	   >~/.fonts/mux$i.pcf.gz; done; xterm -fa "misc Mux:size=24"

Comparison to earlier vfontas (2005-2018) invocation syntax
       `vfontas	-D out/	-xf x.fnt` has become `vfontas -loadfnt	x.fnt -saveclt

       `vfontas	-D out/	-cf x.fnt` has become `vfontas -loadclt	out/  -savefnt

       `vfontas	-Ecf x.fnt` has	become `vfontas	-blankfnt -savefnt x.fnt`.

       `vfontas	-G <x.fnt >x.psf` has become `vfontas -loadfnt x.fnt -canvas 9
       16 -lge -savepsf2 x.psf`.

       `vfontas	-W <x.fnt >x.psf` has become `vfontas -loadfnt x.fnt  -upscale
       2 1 -savepsf2 x.psf`.

       `vfontas	 --cpi	-D  out/  -f  x.cpi/`  has become `vfontas -xcpi x.cpi

See also

hxtools				  2019-04-21			    vfontas(1)

Name | Syntax | Description | Aspect ratio | Commands | Known limits | The Consoleet bitmap format | Examples | Comparison to earlier vfontas (2005-2018) invocation syntax | See also

Want to link to this manual page? Use this URL:

home | help