2017-04-24 6 views
1

안녕하세요.파이썬 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

행이 "Disconnecting from Database" 일 때마다 현재 imgdraw 객체를 삭제하고 삭제 한 후 새 객체를 만들어야합니다. 원래 코드에서 이미지를 모든 행에 저장하고 있었으므로 좋지 않습니다. 아래 코드를 참조하십시오.

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

죄송합니다. 답변을 수락하는 것을 잊었습니다. 거기 당신은 간다!. –