如何使用PIL绘制渐变颜色的字符?

Amm*_*san 8 python image-processing python-imaging-library

我有使用 PIL 从字体文件生成字符图像的功能。对于当前示例,它生成白色背景图像和红色字符文本。我现在想要的是,我可以生成渐变颜色,而不是纯红色或任何其他颜色。我当前的代码可以做到这一点吗?我看过这篇文章,但它对我没有帮助。

编辑1:

目前,我正在使用 PIL 从字体文件生成英文字母图像。我的代码中的字体变量有 N 个“.ttf”文件。假设 N=3 都有不同的风格,例如 style1、style2、style3。我当前的代码总是会生成这N种不同的样式,具有固定的白色背景和固定的红色字符颜色。如下图所示。

款式1

款式2

款式3

我想为每种样式应用渐变,而不是角色的红色。即 style1 字体图像中的所有字符应具有相同的渐变,style 2 字体样式应具有与 style1 字符不同的渐变,但其所有字符应相同,依此类推。如下图(样式与上图不同,只是为了演示我想要的)。

渐变风格1

渐变风格2

渐变风格3

到目前为止我的代码:

fonts = glob.glob(os.path.join(fonts_dir, '*.ttf'))
for font in fonts:
  image = Image.new('RGB', (IMAGE_WIDTH, IMAGE_HEIGHT), color='white')
  font = ImageFont.truetype(font, 150)
  drawing = ImageDraw.Draw(image)
  w, h = drawing.textsize(character, font=font)
  drawing.text(
  ((IMAGE_WIDTH-w)/2, (IMAGE_HEIGHT-h)/2),
  character,
  fill='red',
  font=font
  )
  image.save(file_path, 'PNG')
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 10

一种相当简单的方法是在黑色背景上绘制白色文本,然后将其用作渐变背景上的 Alpha/透明度通道。

这是背景渐变:

在此输入图像描述

#!/usr/bin/env python3

from PIL import Image, ImageDraw, ImageFont

w, h = 400, 150
image = Image.open('gradient.jpg').rotate(90).resize((w,h))
font = ImageFont.truetype('/System/Library/Fonts/MarkerFelt.ttc', 80)

# Create new alpha channel - solid black
alpha = Image.new('L', (w,h))
draw = ImageDraw.Draw(alpha)
draw.text((20,10),'Some Text',fill='white',font=font)
alpha.save('alpha.png')

# Use text cutout as alpha channel for gradient image
image.putalpha(alpha)
image.save('result.png')
 
Run Code Online (Sandbox Code Playgroud)

看起来alpha.png像这样:

在此输入图像描述

看起来result.png像这样:

在此输入图像描述

请注意,文本周围的区域是透明的。但您可以轻松地将其粘贴到白色或黑色背景上。因此,假设您想要黄色背景,请将以下内容添加到上面代码的底部:

solid = Image.new('RGB', (w,h), 'yellow')
solid.paste(image,image)
solid.save('result2.png')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 抱歉,据我所知,我的建议是理想的。你可以在任何你想要的地方使用相同或不同的梯度 - 如果你想要这样,它是完全可重复和确定的,如果你不想要,它是随机的。我看不出问题所在。如果您希望每个字母具有相同的渐变,可以将渐变旋转 90 度,当然可以吗?或者在同一条彩虹上一次绘制一个字母并将其附加? (2认同)