关于字体

一般常见的字体库是ttf格式,可能是True Type,也可能是Open Type。Open Type是M$和Adobe联合推出的新的字体形式。在Windows打开字体查看器就可以看到字体具体是那种。还有一种字体格式是PostScript格式,是Adobe推出的。

font creator是一个创建True Type字体的收费工具。

sfntly是一个可以对字体库(.ttf文件)进行提取子集并生成.ttf文件的工具。谷歌的开源工具,在github下载后,在该项目的java目录下用ant构建即可使用。java目录下有一个简单的说明书。(在windows下测试使用open type的ttf文件提取中文可能有异常。)

以上是关于矢量字体的介绍,矢量字体的好处是不论字体放大还是缩小,都能得到一个比较好的效果。以下介绍位图字体。位图字体实际上的组成是一张位图代表一个字,或者一张位图收集了一系列字的集合,并且配合一份位图文件的描述文件。例如fnt文件搭配png文件,png文件为位图,而fnt文件描述了位图中每个字在位图中的位置。也有一些位图文字比较简单,不需要fnt文件,默认一样的宽度,以及确定好的排序。

Glyph Designer 生成位图文字的一个Mac软件,输入ttf文件,以及文字集。即可输出一个png+fnt。

位图文字的好处是在渲染的过程中不需要太多的额外的计算,而矢量文字则需要在运行中进行文字形状生成。

以上讲的是普通的位图文件。普通的位图文件还有一个缺点,当字体放大或者缩小时,效果就没那么好。于是还有一个位图文字的解决方案:有向距离场Signed Distance Field。位图文件的每个像素表示的是文字的颜色,而SDF的方案中,文件中每个像素记录的是到文字轮廓的距离。文字轮廓内的为负数表示,文字轮廓外的用正数表示。这种方案的好处是一张32*32的文件,就可以用来显示很大的字。P.S. 文字只是SDF的一个应用场景。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是修改后的代码,使用了 Spinbox 控件来设置字体大小: ```python import tkinter as tk from tkinter import font class App: def __init__(self, master): self.master = master self.master.title("文字样式示例程序") # 创建单选按钮和复选框 self.bold_var = tk.BooleanVar() self.bold_checkbox = tk.Checkbutton(self.master, text="粗体", variable=self.bold_var, command=self.update_text) self.bold_checkbox.pack(side=tk.LEFT, padx=10, pady=10) self.italic_var = tk.BooleanVar() self.italic_checkbox = tk.Checkbutton(self.master, text="斜体", variable=self.italic_var, command=self.update_text) self.italic_checkbox.pack(side=tk.LEFT, padx=10, pady=10) self.underline_var = tk.BooleanVar() self.underline_checkbox = tk.Checkbutton(self.master, text="下划线", variable=self.underline_var, command=self.update_text) self.underline_checkbox.pack(side=tk.LEFT, padx=10, pady=10) self.font_size_var = tk.StringVar() self.font_size_var.set("12") self.font_size_spinbox = tk.Spinbox(self.master, from_=8, to=36, textvariable=self.font_size_var, command=self.update_text) self.font_size_spinbox.pack(side=tk.LEFT, padx=10, pady=10) # 创建文本框 self.text_box = tk.Text(self.master, height=10) self.text_box.pack(padx=10, pady=10) # 设置默认字体 self.font = font.Font(family="Arial", size=12, weight="normal", slant="roman", underline=0) self.text_box.config(font=self.font) def update_text(self): # 更新字体样式 weight = "bold" if self.bold_var.get() else "normal" slant = "italic" if self.italic_var.get() else "roman" underline = self.underline_var.get() size = int(self.font_size_var.get()) self.font.configure(weight=weight, slant=slant, underline=underline, size=size) self.text_box.config(font=self.font) # 创建主窗口 root = tk.Tk() # 启动GUI程序 app = App(root) # 进入消息循环 root.mainloop() ``` 在这个程序中,我们使用 Spinbox 控件来设置字体大小。当用户更新字体大小时,文本框中的文本将会相应地更新。 注意:这只是一个简单的示例程序,你需要根据需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值