[NameError]未定义全局名称"ImageDraw"

嗨伙计们,
我正在开发Pillow和(Tkinter,BmpImagePlugin,cStringIO,子进程,Ctype s,re.N)个模块
如果这种情况告诉我,我会用这种方式
属性错误

选择 | 换行 | 行号
  1. from PIL import *

我用Try-Expect解决了这个代码行

选择 | 换行 | 行号
  1. try:
  2.     from PIL import *
  3. except AttributeError: #module has no attribute ImageN
  4.     import Image
  5.     import ImageDraw
  6.     import ImageFont
  7.  

我的原始代码部分

选择 | 换行 | 行号
  1. class capsGen(object):
  2.     def __init__(self):
  3.         pass
  4.  
  5.     def videoGen(self,path):
  6.         iv = InputVideoStream()
  7.         iv.open(path)
  8.         self.videoHead(path)
  9.         print self.topDuration
  10.         frameDiff = list(enumerate(iv.readframe())) #bmp -> [io][1]
  11.         self.totalFrame = frameDiff [-1][0]
  12.         #16 imgs
  13.         self.genImgs = []
  14.         curImg = 0
  15.         while True:
  16.             if curImg < 16:
  17.                 self.genImgs.append(randint(1,self.totalFrame))
  18.                 curImg = curImg + 1 
  19.             else:
  20.                 break
  21.  
  22.  
  23.         try:
  24.             src = PIL.Image.open("src.png")
  25.             ciz = PIL.ImageDraw.draw(src)
  26.             ft = PIL.ImageFont.truetype("arial.ttf",32)
  27.             ciz.text((190,15),self.fileName,font=ft) #fileName
  28.             src.save("1.png")
  29.  
  30.  
  31.             #print frameDiff[5][0]
  32.             for i in self.genImgs:
  33.                 imj = PIL.Image.open(StringIO.StringIO(frameDiff[i][1])) #base io -> [capsNo][1]
  34.                 imj.save("%s.png"%i)
  35.         except NameError:
  36.             src = Image.open("src.png")
  37.             ciz = ImageDraw.draw(src)
  38.             ft = ImageFont.truetype("arial.ttf",32)
  39.             ciz.text((190,15),self.fileName,font=ft) #fileName
  40.             src.save("1.png")
  41.  
  42.  
  43.             #print frameDiff[5][0]
  44.             for i in self.genImgs:
  45.                 imj = Image.open(StringIO.StringIO(frameDiff[i][1])) #base -> [io][1]
  46.                 imj.save("%s.png"%i)
  47.  
  48.  
  49.  

我的错误,

选择 | 换行 | 行号
  1. Traceback (most recent call last):
  2.   File "o.py", line 275, in (module)
  3.     run = capsGen()
  4.   File "o.py", line 42, in __init__
  5.     self.videoGen() #for developers
  6.   File "o.py", line 157, in videoGen
  7.     ciz = ImageDraw.draw(src)
  8. NameError: global name 'ImageDraw' is not defined
  9.  

但我安装了Pillow模块,并且我在导入PIL或Image..N模块时创建了空的PYTHON文件。它不仅仅是在处理my_project(o.py)
而不是你的利息。
干得好。

# 回答1


原因可能有很多,包括图像文件的权限问题。尝试下面的代码(附加了Manning的书中的"chairs.png"以进行测试)。替换你的文件名,看看哪些有效,哪些无效,然后你就有希望适应你的程序了。

选择 | 换行 | 行号
  1. import Image, ImageDraw
  2.  
  3. image_name="chairs.png"
  4. im = Image.open(image_name)
  5. draw = ImageDraw.Draw(im)
  6. draw.line((0, 0) + im.size, fill=255)
  7. draw.line((0, im.size[1], im.size[0], 0), fill=128)
  8.  
  9. im.show()

附加图像
File Type: png
Chairs.png
(62.2KB,331次浏览)

# 回答2


您好@dwblas,
我试着参考名字就像你对我说的那样。
而且,我做了无效的移动,我忘记了图像属性中的Tkinter模块
我改了这个
来自Tkinter导入*

选择 | 换行 | 行号
  1. import Tkinter as tk
  2.  

而且,我的项目文件在一些.Open函数中,我改成了这些名字。
感谢您的关注。
干得好。

标签: python

添加新评论