2014-04-22 3 views
1

I 나는 새, 안녕하세요 그래서 커뮤니티 나는 베개와 함께 devoloping하고'ImageDraw'전역 이름이 정의되지 나가서 설명하자면 NameError

(Tkinter를, BmpImagePlugin, cStringIO, 서브 프로세스, CTYPE의 재 .. N) 모듈

이 상황이 나에게 보여 주면 때

나는이 방법을 사용하고 AttributeError

from PIL import * 

내가 시도-제외

이 코드 라인을 해결

내 orginal 한 코드 부분

class capsGen(object): 
    def __init__(self): 
     pass 

    def videoGen(self,path): 
     iv = InputVideoStream() 
     iv.open(path) 
     self.videoHead(path) 
     print self.topDuration 
     frameDiff = list(enumerate(iv.readframe())) #bmp -> [io][1] 
     self.totalFrame = frameDiff[-1][0] 
     #16 imgs 
     self.genImgs = [] 
     curImg = 0 
     while True: 
      if curImg < 16: 
       self.genImgs.append(randint(1,self.totalFrame)) 
       curImg = curImg + 1 
      else: 
       break 


     try: 
      src = PIL.Image.open("src.png") 
      ciz = PIL.ImageDraw.draw(src) 
      ft = PIL.ImageFont.truetype("arial.ttf",32) 
      ciz.text((190,15),self.fileName,font=ft) #fileName 
      src.save("1.png") 


      #print frameDiff[5][0] 
      for i in self.genImgs: 
       imj = PIL.Image.open(StringIO.StringIO(frameDiff[i][1])) #base io -> [capsNo][1] 
       imj.save("%s.png"%i) 
     except NameError: 
      src = Image.open("src.png") 
      ciz = ImageDraw.draw(src) 
      ft = ImageFont.truetype("arial.ttf",32) 
      ciz.text((190,15),self.fileName,font=ft) #fileName 
      src.save("1.png") 


      #print frameDiff[5][0] 
      for i in self.genImgs: 
       imj = Image.open(StringIO.StringIO(frameDiff[i][1])) #base -> [io][1] 
       imj.save("%s.png"%i) 

내 오류,

Traceback (most recent call last): 
    File "o.py", line 275, in (module) 
    run = capsGen() 
    File "o.py", line 42, in __init__ 
    self.videoGen() #for developers 
    File "o.py", line 157, in videoGen 
    ciz = ImageDraw.draw(src) 
NameError: global name 'ImageDraw' is not defined 

그러나 나는 베개 모듈을 설치하고 나는 수입 PIL 또는 Image..N 모듈 빈 파이썬 파일 작업을 만듭니다. 그저 my_project (o.py)에서 작업하고있는 것이 아닙니다.

관심 대상입니다. 좋은 작품입니다.

답변

2

당신은 우리에게 "Tkinter"모듈을 말했습니다. 당신이 Tkinter의 모듈이 같은

from Tkinter import * 

Generaly,이 같은 사용 프로그래머를 가져올 경우. 그리고 PIL 모듈을 사용하십시오. 우리는 모든 모듈 클래스 이름을 충돌 때문에 알고 있어야합니다.

이미지 모듈의 Tkinter, 이미지 모듈의 PIL. 두 가지 .open 속성은 거의 동일합니다. ,

해결,

import Tkinter as tk 

당신이 베개를 사용하는 경우 나하지, 난 당신에 대한 조언이

from PIL import Image, ImageDraw, ImageFont 

같은

에 사용 그리고 마지막으로, 당신은 문자열의 이름은 예를 들어, 참조하도록한다

class tryAgain(object): 
    def __init__(self): 
     self.referenceName = "Hell" + "o" 

    def run(self): 
     img = Image.open(self.referenceName) 
     #this like 
관련 문제