我想根据给定的角度和方向(向左或向右倾斜)控制文本的倾斜度(斜体),如下图所示:
我偶然发现了这个很棒的答案:How does perspective transformation work in PIL? ,玩了代码,并阅读了 AFFINE
的文档,但对我来说仍然不够清楚。
有人可以解释一下我吗(数学和逻辑方面),我该怎么做?谢谢。
最佳答案
要生成一些文本,我们可以使用任何方法,这里我使用 ImageFont 来获取黑白蒙版。
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
然后,我想在左侧和右侧添加填充,因为我们将水平剪切文本。
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
.
def shear(img, shear):
shear = img.transform(img.size, Image.AFFINE, (1, shear, 0, 0, 1, 0))
return shear
调用代码:
img = generate_text('test')
img = add_border(img, 200)
img = shear(img, 2)
关于python-3.x - Python - 使用 PIL 库使文本倾斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51694433/