AFAIK không có cổng hiện có của phông chữ này cho bất kỳ biến thể phác thảo nào. Tuy nhiên, đây là một số chi tiết và hack, có thể giúp bạn trên đường đi.
Các t.fnt , Tektite, được tạo ra bởi (cựu?) ClySmic phần mềm , và có khả năng Ralph B Smith Jr, Chủ tịch / Giám Programmer / Nấu / chai máy giặt . Đó là một phông chữ bitmap được bao gồm trong chương trình VFONT cho DOS và OS / 2. Nó tải phông chữ thay thế cho các hệ thống VGA. Tên của tác giả được đặt tên là Tektite và được mô tả là phông chữ theo phong cách "Kiến trúc sư".
VFONT có thể được tải xuống trong kho lưu trữ CVFONT.ZIP và CVFONTA.ZIP. Các Tektite phông chữ là một phần của sau này. Trước đây là phiên bản cũ hơn chỉ dành cho DOS.
VFONT và khai thác:
Kho lưu trữ bao gồm chương trình DOS, VFONT.COM, OS / 2 chương trình VFONT2.EXE, cơ sở dữ liệu phông chữ VFONT.DAT và README.MAN. VFONT.DAT chứa 13 phông chữ bitmap được lưu trữ trở lại. Để giải nén phông chữ Tektite, hãy làm:
dd if=VFONT.DAT of=t.fnt bs=1 skip=28672 count=4096
Điều này cung cấp cho bạn một tệp phông chữ loại RAW, là tệp có trong ví dụ Slackware.
Mỗi phông chữ là 4096 byte. Vì vậy, để trích xuất những người khác chỉ cần thay đổi tùy chọn bỏ qua . Tức c.fnt
là sau khi t.fnt
cung cấp cho bạn một giá trị bỏ qua 28672 + 4096 = 32768
. Tất cả các phông chữ được bao gồm trong Linux và để thực hiện trích xuất hoàn chỉnh, người ta có thể làm:
#!/bin/bash
pos=0
for n in s sd r ro rl mu ml t c b m mr sc; do
dd if=VFONT.DAT of=$n.fnt bs=1 skip=$pos count=4096
((pos += 4096))
done
... hoặc, tất nhiên, tải xuống từ một trong những bản phát hành khác nhau bao gồm chúng.
Các tệp này có thể được tải trực tiếp trong thiết bị đầu cuối bằng cách:
setfont t.fnt
Đặt tên trong Linux
Phông chữ được đặt tên trong Linux bởi các tùy chọn cho chương trình VFONT. Tektite có /T
. Các phông chữ khác cũng được bao gồm, cũng được đặt tên theo tùy chọn dòng lệnh cho VFONT. ( / S = s.fnt, / SD = sd.fnt, / RO = ro.fnt ... vv)
Phông chữ RAW
Định dạng phông chữ RAW (lỗi thời nhưng được công nhận) là định dạng phông chữ đơn giản nhất. Nó không có tiêu đề, không có chân trang, không có byte thoát, v.v. Nó thường có chiều rộng 8 pixel (bit) - cũng như các phông chữ VFONT. Họ luôn có 256 glyphs.
Từ đó chúng ta có thể dễ dàng tính được chiều cao bằng cách:
file_size (bits) 8 × 4096
h = -------------------- e.g. h = ------------- = 16
w × 256 8 × 256
Vì tất cả các phông chữ VFONT có kích thước 4096, chúng tôi cũng biết rằng tất cả chúng đều có chiều cao 16 pixel (bit). Điều đó cũng cho rằng mỗi glyph là 16 byte.
Kết xuất ASCII
Vì các phông chữ phù hợp với phạm vi ASCII khi nói đến 0x20 (dấu cách) - 0x7e (dấu ngã), chúng ta có thể thực hiện kết xuất ASCII đơn giản của glyphs.
Ví dụ, chữ cái A
có vị trí 65. Vì mỗi glyph là 8 × 16 = 128 bit, chúng ta có chúng ở 128/8 = 16 byte.
Khi 65 × 16 = 1040, chúng ta có thể trích xuất glyph A
bằng cách (ở đây bao gồm chuyển đổi thành nhị phân và thay thế 0 và 1 để dễ đọc hơn):
xxd -s 1040 -l 16 -b -c 1 t.fnt | cut -d' ' -f 2 | tr 0 ' ' | tr 1 '#'
Cung cấp cho chúng tôi:
Output from | Data in file
command: | Binary: Hex: Offset Offset
| Hex: Dec:
| 00000000 00 410 1040
| 00000000 00 411 1041
## | 00011000 18 412 1042
## | 00011000 18 413 1043
#### | 00111100 3c 414 1044
# # | 00100100 24 415 1045
## ## | 01100110 66 416 1046
## ### | 01101110 6e 417 1047
#### # | 01111010 7a 418 1048
### ## | 11100011 e3 419 1049
## ## | 11000011 c3 41a 1050
## ## | 11000011 c3 41b 1051
| 00000000 00 41c 1052
| 00000000 00 41d 1053
| 00000000 00 41e 1054
| 00000000 00 41f 1055
Sử dụng một số mã C đơn giản, chúng tôi cũng có thể hiển thị một số hình ảnh PBM đơn giản. Đây là đầu ra mẫu từ tất cả các phông chữ trong VFONT:
Chỉnh sửa với FontForge
Nếu bạn muốn làm việc với phông chữ tôi đoán bạn có thể đến FontForge . Vì nó không nhận ra phông chữ RAW, bạn phải chuyển đổi nó sang định dạng khác. Một trong những chuyển đổi đơn giản hơn có thể là BDF. Một lựa chọn là sử dụng Công cụ PSF của John Elliot . Đầu tiên chuyển đổi từ RAW sang PSF sau đó PSF sang BDF:
raw2psf t.fnt t.psf
psf2bdf t.psf t.bdf
Bây giờ có thể mở tệp BDF trong FontForge
Vì quy trình này khá đơn giản (và giống nhau cho tất cả các VFONT), bạn cũng có thể sử dụng tập lệnh này để chuyển đổi trực tiếp sang định dạng BDF:
Sử dụng mẫu:
./raw2bdf Tektite t.fnt > t.bdf
Cung cấp cho bạn phông chữ Tektite dưới dạng BDF.
#!/bin/bash
if [ $# -lt 2 ]; then
printf "Usage: %s <NAME> <raw-fnt-file>\n" $0
exit
fi
name=$1
file=$2
cat <<EOM
STARTFONT 2.1
FONT $name
SIZE 16 75 75
FONTBOUNDINGBOX 8 16 0 -4
STARTPROPERTIES 3
FONT_DESCENT 4
FONT_ASCENT 12
DEFAULT_CHAR 255
ENDPROPERTIES
CHARS 256
EOM
hexdump -ve '/1 "%02x\n"' "$file" | awk '
BEGIN {
n = 0;
}
(!((NR - 1) % 16)) {
if (n > 0)
print "ENDCHAR"
printf "STARTCHAR C00%02x\n"\
"ENCODING %d\n"\
"SWIDTH 666 0\n"\
"DWIDTH 8 0\n"\
"BBX 8 16 0 -4\n"\
"BITMAP\n",
n, n
++n
}
{
print $0
}
END {
print "ENDCHAR"
print "ENDFONT"
}
'
Các phiên bản khác
Có một số phiên bản sửa đổi của phông chữ Tektite. Nếu bạn tìm kiếm nó, tùy ý thêm eg clysmicv vào cụm từ tìm kiếm bạn có thể nghiên cứu.
Kết xuất hình ảnh
Để hoàn thiện, tôi thêm mã C được trộn để tạo hình ảnh ở trên. display
và convert
là một phần của ImageMagick .
Sử dụng mẫu:
$ ./fntsampler t.fnt hello a
## ### ###
## ## ##
## ## ##
## ### ##### ## ## #####
## ## ## ## ## ## ## ## ##
#### #### ### ## ## ## ##
### ####### ## ## ## ##
## #### ## ## ## ##
## #### ## ## ## ## ##
## ## ###### ## ## #####
$ ./fntsampler t.fnt "Hello World!" > hello.pbm
$ display hello.pbm
Hình ảnh mẫu của tất cả các phông chữ ở trên được tạo bởi:
$ for f in *.fnt; do ./fntsampler "$f" "$(printf "%-6s Hello ABC abc 123" "$f")" | convert - "${f%.*}.png"; done
$ convert -negate -append *.png collection.png
Mã số:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int usage(char *me, char *s)
{
fprintf(stderr,
"Usage: %s <RAW-font-file> \"<string>\" [format] [[invert] | [dot] [blank]]\n\n"
" format p : PBM image (default).\n"
" a : ASCII.\n"
" invert i : invert b/w in PBM.\n"
" dot\n"
" blank : Dot / blank in ASCII mode.\n\n"
"%s\n"
,
me, errno ? "" : s
);
if (errno)
perror(s);
return 1;
}
int main(int argc, char *argv[])
{
char *me = argv[0];
char buf[4096];
size_t n;
char *p;
int i, j, k;
FILE *fh;
char *s;
char fmt = 'p', dot = '1', blank = '0';
if (argc < 3)
return usage(me, "Missing argument(s)");
if (!(fh = fopen(argv[1], "r")))
return usage(me, "Unable to open file");
if ((fread(buf, 1, 4096, fh) != 4096))
return usage(me, "Bad file size");
s = argv[2];
if ((n = strlen(s)) < 1)
return usage(me, "Empty string");
if (argc > 3)
fmt = argv[3][0];
if (fmt != 'a' && fmt != 'p')
return usage(me, "Unknown format");
if (fmt == 'a') {
dot = argc > 4 ? argv[4][0] : '#';
blank = argc > 5 ? argv[5][0] : ' ';
} else {
if (argc > 4 && argv[4][0] == 'i') {
dot = '0';
blank = '1';
}
printf("P1\n");
printf("#Text: \"%s\", using %s\n", s, argv[1]);
printf("%u 16\n", n * 8);
}
for (i = 0; i < 16; ++i) {
for (j = 0; j < (int)n; ++j) {
p = buf + (s[j] * 16) + i;
for (k = 7; k >= 0; --k) {
putchar((*p >> k) & 0x01 ? dot : blank);
}
/*putchar(' '); */
}
putchar('\n');
}
return 0;
}