我希望根据给定的度和方向(左或右倾斜)控制文本的倾斜(斜体),类似于下面的图像:

我偶然发现了一个很好的答案:How does perspective transformation work in PIL?,播放了代码,阅读了AFFINE的文档,但对我来说还不够清楚。
有人能解释一下我(数学和逻辑上的智慧)吗?我该怎么做?谢谢。
发布于 2018-08-06 06:02:33
为了生成一些文本,我们可以使用任何方法,这里我使用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)https://stackoverflow.com/questions/51694433
复制相似问题