相关疑难解决方法(0)

在 Python 中使用给定字体正确渲染文本并准确检测其边界

这可能是一件非常简单的事情,我也认为是这样,但显然不是。我一定花了一个星期的时间来尝试完成这项工作,但出于对我的热爱,我无法做到。

我需要的

我需要在 Python 中使用任何给定的字体(类似手写的)呈现任何给定的字符串(仅包含标准字符)。字体必须从 TTF 文件加载。我还需要能够准确地检测它的边界(获得文本的确切开始和结束位置,垂直和水平),最好在绘制之前。最后,如果输出是一个我可以继续处理的数组,而不是写入光盘的图像文件,那真的会让我的生活更轻松。

我试过的

Imagemagick 绑定(即 Wand):在设置图像大小并在其上渲染文本之前,无法弄清楚如何获取文本度量。

Pango 通过 Pycairo 绑定:几乎不存在的文档,无法弄清楚如何从文件中加载 TrueType 字体。

PIL(枕头):最有前途的选择。我已经设法准确地计算出任何文本的高度(令人惊讶的是它不是高度getsize返回值),但是某些字体的宽度似乎有问题。不仅如此,那些宽度有问题的字体也会被错误地渲染。即使使图像足够大,它们也会被切断。

以下是一些示例,文本为“Puzzling”:

字体:恋人争吵

结果:

恋人争吵渲染

字体:法哈多斯小姐

结果:

法哈多斯小姐渲染

这是我用来生成图像的代码:

from PIL import Image, ImageDraw, ImageFont
import cv2
import numpy as np
import glob
import os

font_size = 75
font_paths = sorted(glob.glob('./fonts/*.ttf'))
text = "Puzzling"
background_color = 180
text_color = 50
color_variance = 60
cv2.namedWindow('display', 0)

for font_path in font_paths:

    font = ImageFont.truetype(font_path, font_size)
    text_width, text_height = font.getsize(text)

    ascent, descent = font.getmetrics() …
Run Code Online (Sandbox Code Playgroud)

python fonts text-rendering python-imaging-library

7
推荐指数
1
解决办法
4152
查看次数

PIL切断字母顶部

我花了很多时间使用Python制作我的第一个Web应用程序,并且我使用来生成图像.在阅读了很多内容之后,我设法实现了正确的文本对齐,包装,生成具有许多扩展的文件等.

但是,PIL生成的所有文本都在顶部被截断.这是一个样本.

PIL生成图像的示例,顶部有文本切断

它应该?Ó?jygpq用各种字体说(字体名称在左边).

我在这里找到了一些帖子:用PIL修剪字体,但我想避免使用另一个模块(aggdraw); 因为我已经在PIL中找到了很多东西,所以我想坚持下去.

我尝试了很多不同大小的字体,但文字仍然被切断了.我甚至尝试使用PIL字体,但它仍然无效.[还将OTF转换为BDF,并转换为PIL].

这是在Ubuntu上.我接下来应该尝试什么?

python fonts text-rendering python-imaging-library

5
推荐指数
1
解决办法
1605
查看次数