使用PIL在Python 2.7中将文本写入图像

3

编辑: 代码可用,但是我有一个问题

draw.text((30,10), "Hello World", (255, 255, 255, 255),font=font)

这段代码输出白色的 "Hello World"。如果你将其修改为

draw.text((30,10), "Hello World", (255, 255, 255, 255),font=font)

输入代码 "Hello world" 将会以黑色字体写在图片上。

我有一个 Python 脚本,试图将 "Hello World" 写入 jpg 图片中,但是当我保存文件时,没有文字被写入其中。有什么想法吗? 我正在使用 Python 2.7 和 Pillow。

我还查看了这份文档:http://pillow.readthedocs.io/en/3.1.x/reference/ImageDraw.html

代码:

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

pattern = Image.open("DANK.jpg", "r").convert('RGBA') 

size = width, height = pattern.size
draw = ImageDraw.Draw(pattern,'RGBA')
font = ImageFont.truetype("Font.ttf", 3)

draw.text((30,10), "Hello World", (255, 255, 255, 255),font=font)
pattern.save('sample-out.jpg')

我也注意到当图像被保存时,颜色会变成灰度。这可能是什么原因?
1个回答

8
以下代码适用于我,但我使用的是Python 3和PNG格式。我将图像放在与代码相同的目录中,然后在图像上写入了文本。
from PIL import Image, ImageDraw, ImageFont
# get an image
base = Image.open('lena.png').convert('RGBA')

# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))

# get a font
fnt = ImageFont.truetype('Pillow/Tests/fonts/FreeMono.ttf', 40)
# get a drawing context
d = ImageDraw.Draw(txt)

# draw text, half opacity
d.text((100,100), "Hello", font=fnt, fill=(255,255,255,128))
# draw text, full opacity
d.text((100,160), "World", font=fnt, fill=(255,255,255,255))

out = Image.alpha_composite(base, txt)

out.show()

我没有这个字体,但是它似乎也可以与Python 2.7和JPG图像一起使用,就像你的代码一样(但我没有这个字体)。

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

pattern = Image.open("DANK.jpg", "r").convert('RGBA')

size = width, height = pattern.size
draw = ImageDraw.Draw(pattern,'RGBA')
#font = ImageFont.truetype("Font.ttf", 3)

draw.text((30,10), "Hello World", (0, 0, 0, 0))#,font=font)
pattern.save('sample-out.jpg')

enter image description here

您的代码最相似的是以下代码(我使用的是Ubuntu 16.04),它还可以在图像上呈现文本。
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

pattern = Image.open("DANK.jpg", "r").convert('RGBA')

size = width, height = pattern.size
draw = ImageDraw.Draw(pattern,'RGBA')
font = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 100)

draw.text((300,10), "Hello World", (0, 0, 0, 0),font=font)
pattern.save('sample-out.jpg')

enter image description here


嗨,我意识到了我的错误所在,我应该使用draw.text((30,10), "Hello World", (0, 0, 0, 255),font=font)来写入黑色而不是白色。感谢您的帮助。 - RedQuirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接