Python 使用PIL/枕头在图像上书写
晚安 今天我想用Python学习PIL/Pillow 我使用了以下代码:Python 使用PIL/枕头在图像上书写,python,pillow,Python,Pillow,晚安 今天我想用Python学习PIL/Pillow 我使用了以下代码: import PIL import PIL.Image as Image import PIL.ImageDraw as ImageDraw import PIL.ImageFont as ImageFont font = ImageFont.truetype("C:\Windows\Fonts\Verdanab.ttf", 80) img = Image.open("C:/Users/imagem/fundo_pre
import PIL
import PIL.Image as Image
import PIL.ImageDraw as ImageDraw
import PIL.ImageFont as ImageFont
font = ImageFont.truetype("C:\Windows\Fonts\Verdanab.ttf", 80)
img = Image.open("C:/Users/imagem/fundo_preto.png")
draw = ImageDraw.Draw(img)
filename = "info.txt"
for line in open(filename):
print line
x = 0
y = 0
draw.text((x, y),line,(255,255,255),font=font)
img.save("a_test.png")
x += 10
y += 10
我不知道“draw.text()”函数是否有效,但我试着在黑色背景图像上写下以下内容
Line 1
Line 2
Line 3
Line 4
Line 5
我所得到的只是同一条线上的这些线
这个函数是如何工作的,以及如何获得不同位置的行的位置,而不是一行在另一行的位置。每次通过循环重置
x=0
,y=0
:这就是为什么它会自动套印。除此之外,你的想法是对的
将这些线移到循环之外,以便它们在开始时只设置一次
x = 0
y = 0
for line in open(filename):
print line
draw.text((x, y),line,(255,255,255),font=font)
img.save("a_test.png")
x += 10
y += 10
每次通过循环时,您都会重置
x=0
,y=0
:这就是它自身套印的原因。除此之外,你的想法是对的
将这些线移到循环之外,以便它们在开始时只设置一次
x = 0
y = 0
for line in open(filename):
print line
draw.text((x, y),line,(255,255,255),font=font)
img.save("a_test.png")
x += 10
y += 10
pbuck的扩展,将x
和y
的初始化移动到循环之外
- 将图像保存在循环体中是无效的。这应该在循环之后移动
- 字体路径应使用原始字符串格式,以防止反斜杠的特殊含义。或者,反斜杠可以加倍,也可以使用正斜杠
- 终端字体通常是单间距的,而Verdana则不是。下面的示例使用字体
Consolas
- 字体大小为80,因此垂直增量应大于10,以防止套印
import os
import PIL.Image as Image
import PIL.ImageDraw as ImageDraw
import PIL.ImageFont as ImageFont
fonts_dir = os.path.join(os.environ['WINDIR'], 'Fonts')
font_name = 'consolab.ttf'
font = ImageFont.truetype(os.path.join(fonts_dir, font_name), 80)
img = Image.new("RGB", (400, 350), "black")
draw = ImageDraw.Draw(img)
filename = "info.txt"
x = y = 0
for line in open(filename):
print(line)
draw.text((x, y), line, (255, 255, 255), font=font)
x += 20
y += 80
img.save("a_test.png")
对pbuck的扩展,将x
和y
的初始化移动到循环之外
- 将图像保存在循环体中是无效的。这应该在循环之后移动
- 字体路径应使用原始字符串格式,以防止反斜杠的特殊含义。或者,反斜杠可以加倍,也可以使用正斜杠
- 终端字体通常是单间距的,而Verdana则不是。下面的示例使用字体
Consolas
- 字体大小为80,因此垂直增量应大于10,以防止套印
import os
import PIL.Image as Image
import PIL.ImageDraw as ImageDraw
import PIL.ImageFont as ImageFont
fonts_dir = os.path.join(os.environ['WINDIR'], 'Fonts')
font_name = 'consolab.ttf'
font = ImageFont.truetype(os.path.join(fonts_dir, font_name), 80)
img = Image.new("RGB", (400, 350), "black")
draw = ImageDraw.Draw(img)
filename = "info.txt"
x = y = 0
for line in open(filename):
print(line)
draw.text((x, y), line, (255, 255, 255), font=font)
x += 20
y += 80
img.save("a_test.png")
应将
x
和y
的初始化移动到循环之前,否则x+=10;y+=10
不会有任何影响。我还将保存循环后的图像。字体路径可以指定为原始字符串r“C:\Windows\Fonts\Verdana.ttf”
,以防止字符串中反斜杠的特殊含义。因为我们讨论的是字体。我是否得到了一种模拟终端字体的字体?我试图模拟命令提示符终端的屏幕,但我使用的字体不是很好。也许,你想使用单间距字体。顺便说一句,Windows字体目录的一种更方便的方式:os.path.join(os.environ['WINDIR','fonts')
。x
和y
的初始化应该在循环之前移动,否则x+=10;y+=10
不会有任何影响。我还将保存循环后的图像。字体路径可以指定为原始字符串r“C:\Windows\Fonts\Verdana.ttf”
,以防止字符串中反斜杠的特殊含义。因为我们讨论的是字体。我是否得到了一种模拟终端字体的字体?我试图模拟命令提示符终端的屏幕,但我使用的字体不是很好。也许,你想使用单间距字体。顺便说一句,Windows字体目录的一种更方便的方式:os.path.join(os.environ['WINDIR','fonts')
。顺便说一句,我正在尝试使用终端Windows字体,但显然PIL不支持它。如何使用终端字体?图像应该在循环后保存一次。顺便说一句,我正在尝试使用终端windows字体,但显然PIL不支持它。如何使用终端字体?循环一次后应保存图像。