参考资料:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140767171357714f87a053a824ffd811d98a83b58ec13000
https://www.cnblogs.com/xianyue/p/6588869.html
https://blog.csdn.net/tianxiawuzhei/article/details/44922843
https://blog.csdn.net/sinat_25704999/article/details/50118465
1、除了内建的模块外,Python还有大量的第三方模块。基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用easy_install或者pip安装。
2、PIL是常用的第三方模块之一,全称Python Imaging Library,已经是Python平台事实上的图像处理标准库了。Window系统下使用PIL前需要作如下准备工作:
(1)从官网下载PIL安装包:http://pythonware.com/products/pil/
(2)安装时会提示在注册表中找不到Python2.7,可运行下面的python程序将Python2.7安装信息写入注册表。
# # script to register Python 2.0 or later for use with win32all # and other extensions that require Python registry settings # # written by Joakim Loew for Secret Labs AB / PythonWare # # source: # http://www.pythonware.com/products/works/articles/regpy20.htm # # modified by Valentine Gogichashvili as described in http://www.mail-archive.com/[email protected]/msg10512.html import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.prefix regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version) installkey = "InstallPath" pythonkey = "PythonPath" pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % ( installpath, installpath, installpath ) def RegisterPy(): try: reg = OpenKey(HKEY_CURRENT_USER, regpath) except EnvironmentError as e: try: reg = CreateKey(HKEY_CURRENT_USER, regpath) SetValue(reg, installkey, REG_SZ, installpath) SetValue(reg, pythonkey, REG_SZ, pythonpath) CloseKey(reg) except: print "*** Unable to register!" return print "--- Python", version, "is now registered!" return if (QueryValue(reg, installkey) == installpath and QueryValue(reg, pythonkey) == pythonpath): CloseKey(reg) print "=== Python", version, "is already registered!" return CloseKey(reg) print "*** Unable to register!" print "*** You probably have another Python installation!" if __name__ == "__main__": RegisterPy()
注:上述代码参考自参考资料2。
(3)从https://pypi.python.org/pypi/Pillow/2.1.0#id2 下载安装 Pillow-2.1.0.win-amd64-py2.7.exe (md5) 64位版本,否则运行PIL相关代码时,会提示"The _imaging C module is not installed"。详细说明参见参考资料3。
下面是我的学习代码:
from PIL import Image, ImageFilter, ImageDraw, ImageFont import os, random def getNewFilename(src, mark, ext): result = None try: o = os.path.splitext(src) result = o[0] + mark + ext except BaseException, e: result = None return result #生成缩略图 def createThumbnail(src): result = None try: im = Image.open(src) w, h = im.size im.thumbnail((w // 2, h // 2)) result = getNewFilename(src, '_thumb', '.jpg') im.save(result, 'jpeg') except BaseException, e: result = None return result #模糊效果 def createBlur(src): result = None try: im = Image.open(src) im2 = im.filter(ImageFilter.BLUR) result = getNewFilename(src, '_blur', '.jpg') im2.save(result, 'jpeg') except BaseException, e: result = None return result # 随机字母: def rndChar(): return chr(random.randint(65, 90)) # 随机颜色1: def rndColor(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) # 随机颜色2: def rndColor2(): return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) #创建验证码图片 w-单个验证码宽度 h-高度 count-验证码个数 def createCode(w, h, count): result = None width = w * count height = h try: image = Image.new('RGB', (width, height), (255, 255, 255)) # 创建Font对象: font = ImageFont.truetype('C:\\Windows\\Fonts\\Arial.ttf', 36) # 创建Draw对象: draw = ImageDraw.Draw(image) # 填充每个像素: for x in range(width): for y in range(height): draw.point((x, y), fill=rndColor()) # 输出文字: sCode = '' for t in range(count): c = rndChar() sCode = sCode + c draw.text((w * t + 10, 10), c, font = font, fill = rndColor2()) # 模糊: image = image.filter(ImageFilter.BLUR) result = getNewFilename('code.jpg', '_' + sCode, '.jpg') image.save(result, 'jpeg') except BaseException, e: result = None return result def Test(): s = raw_input('input an image filename:') thumfile = createThumbnail(s) if thumfile != None: print 'thumbnail filename is %s for %s' % (thumfile, s) else: print 'createThumbnail called failure' blurfile = createBlur(s) if blurfile != None: print 'BLUR filename is %s for %s' % (blurfile, s) else: print 'createBlur called failure' codefile = createCode(60, 60, 4) if codefile != None: print 'Code Filename is %s' % codefile else: print 'createCode called failure'
注:引用PIL相关模块时,必须以“from PIL import ...”的格式,否则会提示"IOError: cannot identify image file"。详细说明参见参考资料4。
3、Python支持多种图形界面的第三方库,包括:Tk、wxWidgets、Qt、GTK等等。但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。直接看代码:
from Tkinter import * class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.createWidgets() def createWidgets(self): self.helloLabel = Label(self, text='Hello, world!') self.helloLabel.pack() self.quitButton = Button(self, text='Quit', command=self.quit) self.quitButton.pack() def Test(): app = Application() # 设置窗口标题: app.master.title('Hello World') # 主消息循环: app.mainloop() return 0今天就学习到这里,下一节从网络编程学起。