用 PIL 绘制粗体/斜体文本?

Posted

技术标签:

【中文标题】用 PIL 绘制粗体/斜体文本?【英文标题】:Draw bold/italic text with PIL? 【发布时间】:2010-12-21 08:55:49 【问题描述】:

如何使 ImageFont.truetype(file, size) 有一个仅指定字体大小的选项。

【问题讨论】:

【参考方案1】:

使用粗体/斜体字体

【讨论】:

澄清一下:字体的每个版本都在一个单独的文件中,例如:Arial.ttf、ArialBold.ttf 等。 如果您使用的是mac,您可以从Font Book.app 中找到字体文件。只需右键单击字体名称,然后单击“在 Finder 中显示”。您可以检查文件路径,将字体文件拖到 Terminal.app 上。【参考方案2】:

如果(无论出于何种原因)您没有单独的粗体版本的字体,将字体设置为粗体的一个相当老套的解决方案是多次打印相同的文本并稍微偏移。

andaleMono = ImageFont.truetype(ANDALE_MONO_PATH,16)
text = "hello world"
mainOffset = (50,50)
xoff, yoff = mainOffset
draw.text(mainOffset,text,font=andaleMono,fill='black')
draw.text((xoff+1,yoff+1),text,font=andaleMono,fill='black')
draw.text((xoff-1,yoff-1),text,font=andaleMono,fill='black')

【讨论】:

在大尺寸的图片中这只是错过了文字【参考方案3】:

许多字体的粗体/斜体版本使用不同的 TTF 文件,所以我想如果你只是指定该文件,它会起作用。

【讨论】:

【参考方案4】:

到目前为止,还没有粗体特征作为参数,但您可以通过在文本中添加相同颜色的文本来轻松解决。下一个代码会详细说明如何使用笔画,这将是有道理的

    draw.text((x, y), text, fill=color, font=font, stroke_width=2,
          stroke_fill="black")

【讨论】:

像魅力一样工作【参考方案5】:

嗯,这是我的第一条评论。我们开始吧。

我将尝试澄清程序。起初我所做的是像这样使用字体的“名称”

font = ImageFont.truetype("C:\Windows\Fonts\\Arial Negrita.ttf",25)

但只得到一些像这样的错误:

    Traceback (most recent call last):
  File "C:/Users/555STi/PycharmProjects/PIL/img.py", line 8, in <module>
    font = ImageFont.truetype("C:\Windows\Fonts\Arial negrita.ttf",25)
  File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 262, in truetype
    return FreeTypeFont(font, size, index, encoding)
  File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 142, in __init__
    self.font = core.getfont(font, size, index, encoding)
IOError: cannot open resource

然后我记得有时字体有其他“名称”或“文件名”,所以,我所做的是转到字体文件夹,然后打开显示所有样式的 Arial 字体,如 negrita(粗体)、cursiva(斜体)等。

右键单击“negrita”样式,选择“属性”,然后是字体的“真实名称”。

在我的例子中,名字是“ariblk”

然后,最后,就用了这样的名字。

font = ImageFont.truetype("C:\Windows\Fonts\\ariblk.ttf",25)

我知道这篇文章很旧,但今天帮助我找到了解决方案。所以我希望能帮助任何人。

=)

【讨论】:

这是否回答了OP的问题? @Nilambar,你是什么意思?对不起,我在这里有点新。 @NikolaiMilos 他的意思是原始发帖人 (OP) 询问了一些相当具体的问题。您正在回答这个问题,“为什么我在加载 Arial Negrita 字体时会出现错误?”如果你重新阅读这个问题,你会发现它完全不同。

以上是关于用 PIL 绘制粗体/斜体文本?的主要内容,如果未能解决你的问题,请参考以下文章

Markdown进阶

Java 没有合成斜体字体

代码过滤富文本的粗体 斜体 颜色 空格

代码过滤富文本的粗体 斜体 颜色 空格

Markdown语法大全(够你用一辈子)

Markdown语法大全(够你用一辈子)