Python 使用PIL/枕头在图像上书写

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

晚安

今天我想用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_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不支持它。如何使用终端字体?循环一次后应保存图像。