Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用PIL绘制具有渐变颜色的字符?_Python_Image Processing_Python Imaging Library - Fatal编程技术网

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

Python 如何使用PIL绘制具有渐变颜色的字符?,python,image-processing,python-imaging-library,Python,Image Processing,Python Imaging Library,我有使用PIL从字体文件生成字符图像的功能。对于当前示例,它生成白色背景图像和红色字符文本。我现在想要的是,我可以生成渐变色,而不是纯红色或任何其他颜色。用我当前的代码可以吗?我已经看到了这一点,但它没有帮助我 编辑1: 目前,我正在使用PIL从字体文件生成英文字母图像。我的代码中的字体变量有N个“.ttf”文件。假设N=3,所有的样式都不同,例如style1、style2、style3。我当前的代码将始终生成这N种不同的样式,具有固定的白色背景和固定的红色字符颜色。如下图所示 我希望为每

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

编辑1:

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

我希望为每个样式应用渐变,而不是为字符使用红色。i、 e.style1字体图像中的所有字符应具有相同的渐变,STYLE2字体样式应具有与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')

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

这是一个背景渐变:

alpha.png
如下所示:

result.png
如下所示:

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

solid = Image.new('RGB', (w,h), 'yellow')
solid.paste(image,image)
solid.save('result2.png')

这个解决方案怎么没有帮助?在我看来,这似乎是一个完全相同的问题。请问结果应该是什么样子?@usr2564301这几乎是一个问题,但在我看来,解决方案的代码并不清晰。我的意思是,我可以使用PIL库获得更好的解决方案吗?@MarkSetchell我在编辑中添加了预期结果示例。我想产生像正确的Y(梯度)图像。谢谢,马克这个创造性的解决方案。实际上,在我当前的场景中,我有N个字体文件,从A到Z都有26个字符。我真正想要的是对所有这些N个字体文件应用N种不同的渐变颜色。但是,第n个字体文件中的字符应具有一致的渐变颜色。如果我在我的问题上应用你当前答案的逻辑,它将以不同的渐变颜色生成相同字体的所有字符(字体为“MarkerFelt.ttc”,但result2.png由于gradient.jpg,所有字符都有不同的渐变)。我不明白你想要什么。请尝试改进问题中的示例图像和描述。谢谢。马克,请查看我在问题中的编辑。我希望你能理解。对不起,据我所知,我的建议是理想的。你可以在任何你想使用的地方使用相同或不同的渐变——如果你想这样,它是完全可重复和确定的,如果你不想这样,它是随机的。我看不出问题所在。如果你想让每个字母都有相同的渐变,你可以将渐变旋转90度,是吗?或者在同一片彩虹上一次一个地画出每个字母,并附加它们?我在答案中加入了梯度的旋转。请再看一看。
solid = Image.new('RGB', (w,h), 'yellow')
solid.paste(image,image)
solid.save('result2.png')