python-3.x - Python - 使用 PIL 库使文本倾斜

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

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

enter image description here

我偶然发现了这个很棒的答案: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

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

enter image description here

最后,我将使用 b 进行仿射变换值,如果你看一下公式,它就是 y 的系数将添加到 x 。所以,更大的b水平剪切力会更大。在本例中,我使用 2 .

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

enter image description here

调用代码:

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/

相关文章:

python - 如何从EXE中提取32x32图标位图数据并将其转换为PIL Image对象?

python - py.test 内部错误> IndexError : list index out of range

javascript - 仅为数字字符指定字体?

css - Font Awesome 图标不显示

javascript - 仅从 Google API 加载特定字体

python - 为什么PIL的Image.fromarray()会使我的图像颜色失真?

python - 难以将不同页面的项目打印在一起

Python3 pyodbc动态构建更新查询

python-3.x - 字符串操作困惑? ELI5

python - 具有高级文本效果的图像库?