请稍候,加载中....

ImageFont 模块

ImageFont 模块

这个 ImageFont 模块定义具有相同名称的类。此类的实例存储位图字体,并与 PIL.ImageDraw.ImageDraw.text() 方法。

PIL使用自己的字体文件格式存储位图字体,最多256个字符。您可以使用 pilfont.py 从… pillow-scripts 将BDF和PCF字体描述符(X窗口字体格式)转换为此格式。

从版本1.1.4开始,PIL可以配置为支持TrueType和OpenType字体(以及FreeType库支持的其他字体格式)。对于早期版本,TrueType支持仅作为imToolkit包的一部分提供。

例子

from PIL import ImageFont, ImageDraw

draw = ImageDraw.Draw(image)

# use a bitmap font
font = ImageFont.load("arial.pil")

draw.text((10, 10), "hello", font=font)

# use a truetype font
font = ImageFont.truetype("arial.ttf", 15)

draw.text((10, 25), "world", font=font)

功能

PIL.ImageFont.load(filename)[源代码]

加载字体文件。此函数从给定的位图字体文件加载字体对象,并返回相应的字体对象。

参数

filename -- 字体文件的名称。

返回

字体对象。

引发

OSError -- 如果无法读取文件。

PIL.ImageFont.load_path(filename)[源代码]

加载字体文件。等同于 load() ,但沿python路径搜索位图字体。

参数

filename -- 字体文件的名称。

返回

字体对象。

引发

OSError -- 如果无法读取文件。

PIL.ImageFont.truetype(font=None, size=10, index=0, encoding='', layout_engine=None)[源代码]

从文件或类似文件的对象加载TrueType或OpenType字体,然后创建字体对象。此函数从给定的文件或类似文件的对象加载字体对象,并为给定大小的字体创建字体对象。

枕头使用FreeType打开字体文件。如果要在Windows上同时打开多个字体,请注意Windows将可以在C中同时打开的文件数限制为512。如果你接近这个极限 OSError 可能引发,报告FreeType“无法打开资源”。

此功能需要“Imagingft”服务。

参数
  • font -- 包含TrueType字体的文件名或类似文件的对象。如果在此文件名中找不到该文件,加载程序还可以在其他目录中搜索,例如 fonts/ Windows上的目录或 /Library/Fonts//System/Library/Fonts/~/Library/Fonts/ 关于MaOS.

  • size -- 请求的大小,以磅为单位。

  • index -- 要加载的字体(默认为第一个可用的字体)。

  • encoding -- 要使用的字体编码(默认为Unicode)。可能的编码包括(有关详细信息,请参阅FreeType文档): “unic”(Unicode) “symb”(Microsoft符号) “ADOB”(Adobe标准) “ADBE”(Adobe专家) “ADBC”(Adobe自定义) “阿姆”(苹果罗马语) “sjis”(班次JIS) “gb”(中国) “大5” “广域网”(扩展的广域网) “约翰”(约翰) “lat1”(拉丁语-1)指定要使用的字符集。它不会更改后续操作中提供的任何文本的编码。

  • layout_engine -- 要使用的布局引擎(如果可用): ImageFont.LAYOUT_BASICImageFont.LAYOUT_RAQM 。您可以使用以下命令检查对Raqm布局的支持 PIL.features.check_feature() 使用 feature="raqm" 。。。添加的版本::4.2.0

返回

字体对象。

引发

OSError -- 如果无法读取文件。

PIL.ImageFont.load_default()[源代码]

加载“Better than Nothing”默认字体。

1.1.4 新版功能.

返回

字体对象。

方法

class PIL.ImageFont.ImageFont[源代码]

PIL字体包装

getmask(text, mode='', *args, **kwargs)[源代码]

为文本创建位图。

如果字体使用抗锯齿,则位图应具有模式 L 并使用最大值255。否则,它应该有模式 1 .

参数
  • text -- 要渲染的文本。

  • mode -- 某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串,以简化C级实现。…添加的版本:1.1.5

返回

内部PIL存储内存实例由 PIL.Image.core 接口模块。

getsize(text, *args, **kwargs)[源代码]

返回给定文本的宽度和高度(以像素为单位)。

参数

text -- 要测量的文本。

返回

(宽度,高度)

class PIL.ImageFont.FreeTypeFont(font=None, size=10, index=0, encoding='', layout_engine=None)[源代码]

freetype字体包装(需要“imagingft”服务)

font_variant(font=None, size=None, index=None, encoding=None, layout_engine=None)[源代码]

创建此FreeTypeFont对象的副本,使用任何指定的参数覆盖设置。

参数与用于初始化此对象的参数相同。

返回

FreeTypeFont对象。

get_variation_axes()[源代码]
返回

变体字体中的轴列表。

引发

OSError -- 如果字体不是变体字体。

get_variation_names()[源代码]
返回

变体字体中命名样式的列表。

引发

OSError -- 如果字体不是变体字体。

getbbox(text, mode='', direction=None, features=None, language=None, stroke_width=0, anchor=None)[源代码]

使用提供的方向、功能和语言以字体呈现时,返回给定文本相对于给定锚点的边框(以像素为单位)。

使用 getlength() 若要以1/64像素精度获取后续文本的偏移量,请执行以下操作。边界框包括某些字体的额外边距,例如斜体或重音。

8.0.0 新版功能.

参数
  • text -- 要渲染的文本。

  • mode -- 某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串,以简化C级实现。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。

  • language -- 文本的语言。不同的语言可以使用不同的字形形状或连字。此参数告诉字体文本使用的是哪种语言,并根据需要应用正确的替换(如果可用)。它应该是一个 BCP 47 language code 需要libraqm。

  • stroke_width -- 文本笔划的宽度。

  • anchor -- 文本锚点对齐方式。确定锚点相对于文本的相对位置。默认对齐方式为左上角。看见 文本锚点 有效值。

返回

(left, top, right, bottom) 边界框

getlength(text, mode='', direction=None, features=None, language=None)[源代码]

使用提供的方向、功能和语言以字体呈现时,返回给定文本的长度(以1/64精度的像素为单位)。

这是以下文本应偏移的量。文本边界框在某些字体中可能超出长度,例如在使用斜体或重音符号时。

结果以浮点形式返回;如果使用基本布局,则结果为整数。

请注意,由于字距调整,两个长度的总和可能不等于连接字符串的长度。如果需要针对字距调整进行调整,请包括以下字符并减去其长度。

例如,与其不同的是

hello = font.getlength("Hello")
world = font.getlength("World")
hello_world = hello + world  # not adjusted for kerning
assert hello_world == font.getlength("HelloWorld")  # may fail

使用

hello = font.getlength("HelloW") - font.getlength("W")  # adjusted for kerning
world = font.getlength("World")
hello_world = hello + world  # adjusted for kerning
assert hello_world == font.getlength("HelloWorld")  # True

或禁用字距调整(需要libraqm)

hello = draw.textlength("Hello", font, features=["-kern"])
world = draw.textlength("World", font, features=["-kern"])
hello_world = hello + world  # kerning is disabled, no need to adjust
assert hello_world == draw.textlength("HelloWorld", font, features=["-kern"])

8.0.0 新版功能.

参数
  • text -- 要测量的文本。

  • mode -- 某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串,以简化C级实现。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。

  • language -- 文本的语言。不同的语言可以使用不同的字形形状或连字。此参数告诉字体文本使用的是哪种语言,并根据需要应用正确的替换(如果可用)。它应该是一个 BCP 47 language code 需要libraqm。

返回

水平文本的宽度,垂直文本的高度。

getmask(text, mode='', direction=None, features=None, language=None, stroke_width=0, anchor=None, ink=0)[源代码]

为文本创建位图。

如果字体使用抗锯齿,则位图应具有模式 L 并使用最大值255。如果字体具有嵌入的颜色数据,则位图应具有模式 RGBA 。否则,它应该有模式 1

参数
  • text -- 要渲染的文本。

  • mode -- 某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串,以简化C级实现。…添加的版本:1.1.5

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形形状或连字。此参数告诉字体文本使用的是哪种语言,并根据需要应用正确的替换(如果可用)。它应该是一个 BCP 47 language code 需要libraqm。。。添加的版本::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

  • anchor -- 文本锚点对齐方式。确定锚点相对于文本的相对位置。默认对齐方式为左上角。看见 文本锚点 有效值。。。添加的版本::8.0.0

  • ink -- 用于在RGBA模式下渲染的前景墨迹。。。添加的版本::8.0.0

返回

内部PIL存储内存实例由 PIL.Image.core 接口模块。

getmask2(text, mode='', fill=<built-in function fill>, direction=None, features=None, language=None, stroke_width=0, anchor=None, ink=0, *args, **kwargs)[源代码]

为文本创建位图。

如果字体使用抗锯齿,则位图应具有模式 L 并使用最大值255。如果字体具有嵌入的颜色数据,则位图应具有模式 RGBA 。否则,它应该有模式 1

参数
  • text -- 要渲染的文本。

  • mode -- 某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串,以简化C级实现。…添加的版本:1.1.5

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形形状或连字。此参数告诉字体文本使用的是哪种语言,并根据需要应用正确的替换(如果可用)。它应该是一个 BCP 47 language code 需要libraqm。。。添加的版本::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

  • anchor -- 文本锚点对齐方式。确定锚点相对于文本的相对位置。默认对齐方式为左上角。看见 文本锚点 有效值。。。添加的版本::8.0.0

  • ink -- 用于在RGBA模式下渲染的前景墨迹。。。添加的版本::8.0.0

返回

内部PIL存储内存实例的元组,由 PIL.Image.core 接口模块,以及文本偏移量,起始坐标和第一个标记之间的间隙

getmetrics()[源代码]
返回

字体上升(从基线到最高轮廓点的距离)和下降(从基线到最低轮廓点的距离,负值)的元组

getname()[源代码]
返回

字体系列的元组(例如Helvetica)和字体样式(例如粗体)

getoffset(text)[源代码]

返回给定文本的偏移量。这是起始坐标和第一个标记之间的间隙。请注意,此间隙包含在 getsize() .

参数

text -- 要测量的文本。

返回

x和y偏移量的元组

getsize(text, direction=None, features=None, language=None, stroke_width=0)[源代码]

如果以提供方向、功能和语言的字体呈现,则返回给定文本的宽度和高度(以像素为单位)。

使用 getlength() 若要以1/64像素精度测量后续文本的偏移量,请执行以下操作。使用 getbbox() 若要获取基于锚点的准确边界框,请执行以下操作。

注解

由于历史原因,此函数从上升行而不是从顶部测量文本高度,请参见 文本锚点 。如果要从顶部测量文本高度,建议使用 getbbox() 使用 anchor='lt' 取而代之的是。

参数
  • text -- 要测量的文本。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形形状或连字。此参数告诉字体文本使用的是哪种语言,并根据需要应用正确的替换(如果可用)。它应该是一个 BCP 47 language code 需要libraqm。。。添加的版本::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

返回

(宽度,高度)

getsize_multiline(text, direction=None, spacing=4, features=None, language=None, stroke_width=0)[源代码]

返回给定文本的宽度和高度(以像素为单位),如果以提供的方向、功能和语言的字体呈现,同时考虑换行符。

参数
  • text -- 要测量的文本。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。

  • spacing -- 线之间的垂直间距,默认为4像素。

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。

  • language -- 文本的语言。不同的语言可以使用不同的字形形状或连字。此参数告诉字体文本使用的是哪种语言,并根据需要应用正确的替换(如果可用)。它应该是一个 BCP 47 language code 需要libraqm。。。添加的版本::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

返回

(宽度,高度)

set_variation_by_axes(axes)[源代码]
参数

axes -- 每个轴的值列表。

引发

OSError -- 如果字体不是变体字体。

set_variation_by_name(name)[源代码]
参数

name -- 样式的名称。

引发

OSError -- 如果字体不是变体字体。

class PIL.ImageFont.TransposedFont(font, orientation=None)[源代码]

用于写入旋转或镜像文本的包装器

常量

PIL.ImageFont.LAYOUT_BASIC

使用TrueType字体的基本文本布局。不支持文本方向等高级功能。

PIL.ImageFont.LAYOUT_RAQM

对TrueType字体使用Raqm文本布局。支持高级功能。

需要Raqm,您可以使用 PIL.features.check_feature() 具有 feature="raqm" .


Python学习手册-