我有一个函数,它使用PIL从字体文件生成字符图像。对于当前示例,它生成一个白色背景图像和一个红色字符文本。我现在想要的是,我可以生成一个渐变颜色,而不是纯红色或任何其他颜色。用我目前的代码,这有可能吗?我见过这个 post ,但它帮不了我。
编辑1:
目前,我正在生成英文字母表图像从字体文件使用PIL。我的代码中的字体变量有N个".ttf“文件。让我们假设N=3都有不同的风格,例如style1、style2、style3。我的当前代码将始终生成这些固定的白色背景和固定红色字符颜色的N个不同的样式。如下图所示。



而不是红色的字符,我想应用梯度的每一种风格。也就是说,style1字体图像中的所有字符都应该具有相同的梯度,样式2的字体样式应该与style1字符具有不同的梯度,但对于其所有字符都应该是相同的,等等。如下图所示(样式与上面的图像不同。这只是为了证明我想要什么)。



到目前为止我的代码是:
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')发布于 2020-08-04 12:24:48
一种相当简单的方法是在黑色背景上用白色绘制文本,然后使用它作为带有渐变的背景上的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')alpha.png看起来如下所示:

result.png看起来是这样的:

注意,文本周围的区域是透明的。但是你可以很容易地把它粘贴到白色或黑色的背景上。因此,假设您想要背景黄色,将以下内容添加到上面代码的底部:
solid = Image.new('RGB', (w,h), 'yellow')
solid.paste(image,image)
solid.save('result2.png')

https://stackoverflow.com/questions/63246100
复制相似问题