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

FreeBSD Manual Pages

  
 
  

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

Name
       vfontas -- a bitmap font	file transformation utility

Syntax
       vfontas commands...

   Commands
       -blankfnt

       -canvas xsize ysize

       -clearmap

       -crop xpos ypos width height

       -fliph

       -flipv

       -invert

       -lge

       -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

       -upscale	xscale yscale

       -xcpi ega437.cpi	outdir/

       -xlat xoffset yoffset

Description
       vfontas	(originally  "VGA  font	 file assembler") can transform	raster
       font files in various ways.

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	 |
       +---------+-----------+------------+--------------+
Commands
   blankfnt
       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.

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

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

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

   fliph, flipv
       Mirrors/flips glyphs.

   lge
       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.

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

   loadfnt
       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
       supported.

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

   loadhex
       Reads a Unifont .hex encoded file.

   loadmap
       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.

   loadpsf
       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.

   savebdf
       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.)

   saveclt
       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.

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

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

   saven1
       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.

   saven2
       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.

   savepsf
       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.

   savesfd
       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
       process.

   setname
       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.)

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

   xcpi
       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.

   xlat
       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.

					 PCLT
					 9 7
					 ..................
					 ....##....##..##..
					 ..##..##..##..##..
					 ..##..##..####....
					 ..##..##..##..##..
					 ....##....##..##..
					 ..................

Examples
       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
       out/`.

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

       `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
       out/`.

See also
       hxtools(7)

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:
<https://www.freebsd.org/cgi/man.cgi?query=vfontas&sektion=1&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help