如何使用PIL使文字倾斜?

时间:2018-08-05 12:44:47

标签: python-3.x python-imaging-library affinetransform

我想根据给定的方向(左或右倾斜)来控制文本的倾斜度(斜体),如下图所示:

enter image description here

我偶然发现了一个很好的答案:How does perspective transformation work in PIL?玩了一下代码,并阅读了AFFINE的文档,但对我来说仍然不够清楚。

有人可以向我解释一下(在数学和逻辑上),我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:2)

要生成一些文本,我们可以使用任何方法,这里我使用ImageFont获得黑白蒙版。

folders = [f for f in os.listdir(path_to_folders) if os.path.isdir(os.path.join(path_to_folders, f))]

enter image description here

然后,我想在左侧和右侧添加填充,因为我们将水平剪切文本。

def generate_text(text):
    fnt = ImageFont.truetype('arial.ttf', 72)
    img = Image.new('1', fnt.getsize(text))
    mask = [x for x in fnt.getmask(text, mode='1')]
    img.putdata(mask)
    img = img.convert('RGB')
    return img

enter image description here

最后,我将使用一个def add_border(img, width): new = Image.new('RGB', (img.width + 2 * width, img.height), (0, 0, 0)) new.paste(img, (width, 0)) return new 值进行仿射变换,如果您看一下公式,则将b的系数添加到y中。因此,较大的x将在水平方向上剪切更多。在这种情况下,我使用的是b

2

enter image description here

呼叫代码:

def shear(img, shear):
    shear = img.transform(img.size, Image.AFFINE, (1, shear, 0, 0, 1, 0))
    return shear