Python PIL 在单独的图像中保存文本

Python PIL save text in separate images

美好的一天。

我正在尝试创建一个 for 循环来读取文件的行,直到满足条件,以便它可以将这些行写入图像,我计划对文件的每一行执行此操作,例如示例以下:

Number: 123456789
Connecting to Database

no rows selected

Disconnecting from Database

Number: 9876543211
Connecting to Database

1111;48446511911986;Helen;Thursday
2222;48498489489489;Helen;Friday
3333;84545221185986;Helen;Monday

Disconnecting from Database

Number: 963852741
Connecting to Database

1234;123456789456123;Clyde;Friday
4321;123456789456123;Clyde;Thuesday
1423;123456789456123;Clyde;Sunday
2341;123456789456123;Clyde;Friday

Disconnecting from Database

Number: 456987321
Connecting to Database

no rows selected

Disconnecting from Database

如您所见,每次第二次出现“数据库”一词时,下一行是关于新号码信息的,因此我尝试使用“数据库”一词作为下面循环的参数。

import os
import PIL
import PIL.Image as Image
import PIL.ImageDraw as ImageDraw
import PIL.ImageFont as ImageFont


img = Image.open("C:/Users/dir/image/black_background.png")
draw = ImageDraw.Draw(img)

fonts_dir = os.path.join(os.environ['WINDIR'], 'Fonts')
font_name = 'consolab.ttf'
font = ImageFont.truetype(os.path.join(fonts_dir, font_name), 15)
x = 2
y = 0
next_print_count = 0
filename = "info.txt"
Number = ""

for line in open(filename):

    if 'Number:' in line:
        Number= line.split(" ",1)[1].strip()

    if 'Testing ' in line:
        line = ""

    draw.text((x, y),line,(200,200,200),font=font)

    y += 15
    img.save(Number + ".png")

问题是每次它开始一个新文件时它也会打印前几行的信息。我该如何避免这种情况?

我也尝试过使用 NUMBER 作为参数,但没有成功。

您需要删除当前的 imgdraw 对象,每次行 "Disconnecting from Database" 并在删除它们后创建新对象。在您的原始代码中,您还在每一行保存图像,这也不好。请参阅下面的代码。

import os
import PIL
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), 15)
x = 2
y = 0
next_print_count = 0
filename = r'info.txt'
Number = ""

with open(filename) as f: 
    img = Image.open("C:\Users\Public\Pictures\Sample Pictures/Chrysanthemum.jpg")
    draw = ImageDraw.Draw(img)

    for line in f:
        if 'Number:' in line:
            Number= line.split(" ",1)[1].strip()

        if 'Testing ' in line:
            line = ""

        draw.text((x, y),line,(200,200,200),font=font)
        y += 15

        if 'Disconnecting from Database' in line:
            img.save(Number + ".png")
            del draw, img
            img = Image.open("C:\Users\Public\Pictures\Sample Pictures/Chrysanthemum.jpg")
            draw = ImageDraw.Draw(img)
            y=0

结果为(此处仅显示两个示例图像,但创建了 4 个)