我想根据给定的度和方向(左或右倾斜)来控制文本的倾斜度(斜体),如下图所示:
我偶然发现了一个很好的答案:How does perspective transformation work in PIL?玩了一下代码,并阅读了AFFINE的文档,但对我来说仍然不够清楚。
有人可以向我解释一下(在数学和逻辑上),我该怎么做?
谢谢
答案 0 :(得分:2)
要生成一些文本,我们可以使用任何方法,这里我使用ImageFont获得黑白蒙版。
folders = [f for f in os.listdir(path_to_folders) if os.path.isdir(os.path.join(path_to_folders, f))]
然后,我想在左侧和右侧添加填充,因为我们将水平剪切文本。
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