首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PIL绘制渐变颜色的字符?

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

Stack Overflow用户
提问于 2020-08-04 11:38:54
回答 1查看 875关注 0票数 7

我有一个函数,它使用PIL从字体文件生成字符图像。对于当前示例,它生成一个白色背景图像和一个红色字符文本。我现在想要的是,我可以生成一个渐变颜色,而不是纯红色或任何其他颜色。用我目前的代码,这有可能吗?我见过这个 post ,但它帮不了我。

编辑1:

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

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

到目前为止我的代码是:

代码语言:javascript
复制
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')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-04 12:24:48

一种相当简单的方法是在黑色背景上用白色绘制文本,然后使用它作为带有渐变的背景上的alpha/透明通道。

这里有一个背景梯度:

代码语言:javascript
复制
#!/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看起来是这样的:

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

代码语言:javascript
复制
solid = Image.new('RGB', (w,h), 'yellow')
solid.paste(image,image)
solid.save('result2.png')

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63246100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档