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 作为参数,但没有成功。
您需要删除当前的 img
和 draw
对象,每次行 "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 个)
美好的一天。
我正在尝试创建一个 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 作为参数,但没有成功。
您需要删除当前的 img
和 draw
对象,每次行 "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 个)