2017-04-24 105 views
1

美好的一天。Python PIL將文本保存在單獨的圖像中

我想創建一個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作爲參數,但它沒有奏效。

回答

1

您需要刪除當前對象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)

enter image description here enter image description here

+0

非常有用,感謝隊友。 –

+0

很高興爲您效勞。如果你發現這個答案有用並且解決了你的問題,請考慮提高它並接受答案。謝謝! – plasmon360

+0

哎呀,忘了接受答案。你去! –