【脚本语言系列】关于Python图像处理PIL,你需要知道的事
来源:互联网 发布:阿里云cdn如何配置 编辑:程序博客网 时间:2024/06/05 06:16
如何使用PIL
- 转换图片格式
# -*- coding:utf-8 -*-#import osfrom PIL import Image # import Imageimport Tkinterimport tkFileDialogimport tkMessageBoxclass Window: def __init__(self): self.root = root = Tkinter.Tk() label = Tkinter.Label(root, text ='选择目录') label.place(x = 5, y = 5) self.entry = Tkinter.Entry(root) self.entry.place(x = 55, y = 5) self.buttonBrowser = Tkinter.Button(root, text = '浏览', command = self.Browser) self.buttonBrowser.place(x = 200, y = 5) frameF = Tkinter.Frame(root) frameF.place(x = 5, y = 30) frameT = Tkinter.Frame(root) frameT.place(x = 100, y = 30) self.fImage = Tkinter.StringVar() self.tImage = Tkinter.StringVar() self.status = Tkinter.StringVar() self.fImage.set('.bmp') self.tImage.set('.bmp') labelFrom = Tkinter.Label(frameF, text = 'From') labelFrom.pack(anchor = 'w') labelTo = Tkinter.Label(frameT, text = 'To') labelTo.pack(anchor='w') frBmp = Tkinter.Radiobutton(frameF, variable = self.fImage, value = '.bmp', text = 'BMP') frBmp.pack(anchor='w') frJpg = Tkinter.Radiobutton(frameF, variable = self.fImage, value = '.jpg', text = 'JPG') frJpg.pack(anchor='w') frGif = Tkinter.Radiobutton(frameF, variable = self.fImage, value = '.gif', text = 'GIF') frGif.pack(anchor='w') frPng = Tkinter.Radiobutton(frameF, variable = self.fImage, value = '.png', text = 'PNG') frPng.pack(anchor='w') trBmp = Tkinter.Radiobutton(frameT, variable = self.tImage, value = '.bmp', text = 'BMP') trBmp.pack(anchor='w') trJpg = Tkinter.Radiobutton(frameT, variable = self.tImage, value = '.jpg', text = 'JPG') trJpg.pack(anchor='w') trGif = Tkinter.Radiobutton(frameT, variable = self.tImage, value = '.gif', text = 'GIF') trGif.pack(anchor='w') trPng = Tkinter.Radiobutton(frameT, variable = self.tImage, value = '.png', text = 'PNG') trPng.pack(anchor='w') self.buttonConv = Tkinter.Button(root, text ='Conv', command = self.Conv) self.buttonConv.place(x = 100, y = 150) self.labelStatus = Tkinter.Label(root, textvariable = self.status) self.labelStatus.place(x = 50, y = 175) def MainLoop(self): self.root.minsize(250, 200) self.root.maxsize(250, 200) self.root.mainloop() def Browser(self): directory = tkFileDialog.askdirectory(title='Python') if directory: self.entry.delete(0, Tkinter.END) self.entry.insert(Tkinter.END, directory) def Conv(self): n = 0 t = self.tImage.get() f = self.fImage.get() path = self.entry.get() if path == '': tkMessageBox.showerror('Python Tkinter', 'Please input path') return filenames = os.listdir(path) os.mkdir(path+'/'+t[-3:]) for filename in filenames: if filename[-4:] == f: Image.open(path + '/' + filename).save(path + '/' + t[-3:]+'/'+filename[:-4] +t) n = n+1 self.status.set('successfully convert %d images' % n)window = Window()window.MainLoop()
- 选取目录
- 配置选项
输出图片
- 生成缩略图
# -*- coding:utf-8 -*-#import osfrom PIL import Image # import Imageimport Tkinterimport tkFileDialogimport tkMessageBoxclass Window: def __init__(self): self.root = root = Tkinter.Tk() self.Image = Tkinter.StringVar() self.status = Tkinter.StringVar() self.mstatus = Tkinter.IntVar() self.fstatus = Tkinter.IntVar() self.Image.set('bmp') self.mstatus.set(0) self.fstatus.set(0) label = Tkinter.Label(root, text = 'Input Percent') label.place(x = 5, y = 5) self.entryNew = Tkinter.Entry(root) self.entryNew.place(x = 65, y = 5) self.checkM = Tkinter.Checkbutton(root, text = 'Bat Conv', command = self.OnCheckM, variable = self.mstatus, onvalue = 1, offvalue=0) self.checkM.place(x = 5, y = 30) label = Tkinter.Label(root, text = 'Choose Files') label.place(x = 5, y = 55) self.entryFile = Tkinter.Entry(root) self.entryFile.place(x = 55, y = 55) self.buttonBrowserFile = Tkinter.Button(root, text = 'Browser', command = self.BrowserFile) self.buttonBrowserFile.place(x = 200, y = 55) label = Tkinter.Entry(root, state = Tkinter.DISABLED) label.place(x = 5, y = 80) self.entryDir = Tkinter.Entry(root, state = Tkinter.DISABLED) self.entryDir.place(x = 55, y = 80) self.buttonBrowserDir = Tkinter.Button(root, text ='Browser', command = self.BrowserDir, state = Tkinter.DISABLED) self.buttonBrowserDir.place(x = 200, y = 80) self.checkF = Tkinter.Checkbutton(root, text = 'Change File Format', command = self.OnCheckF, variable = self.fstatus, onvalue=1, offvalue = 0) self.checkF.place(x = 5, y = 110) frame = Tkinter.Frame(root) frame.place(x = 10, y = 130) labelTo = Tkinter.Label(frame, text = 'Format') labelTo.pack(anchor='w') self.rBmp = Tkinter.Radiobutton(frame, variable = self.Image, value = 'bmp', text = 'BMP', state = Tkinter.DISABLED) self.rBmp.pack(anchor='w') self.rJpg = Tkinter.Radiobutton(frame, variable = self.Image, value = 'jpg', text = 'JPG', state = Tkinter.DISABLED) self.rJpg.pack(anchor='w') self.rGif = Tkinter.Radiobutton(frame, variable = self.Image, value = 'gif', text = 'GIF', state = Tkinter.DISABLED) self.rGif.pack(anchor='w') self.rPng = Tkinter.Radiobutton(frame, variable = self.Image, value = 'png', text = 'PNG', state = Tkinter.DISABLED) self.rPng.pack(anchor='w') self.buttonConv = Tkinter.Button(root, text = 'Conv', command = self.Conv) self.buttonConv.place(x = 100, y = 175) self.labelStatus = Tkinter.Label(root, textvariable = self.status) self.labelStatus.place(x = 80, y = 205) def MainLoop(self): self.root.minsize(250, 250) self.root.minsize(250, 250) self.root.mainloop() def BrowserDir(self): directory = tkFileDialog.askdirectory(title='Python') if directory: self.entryDir.delete(0, Tkinter.END) self.entryDir.insert(Tkinter.END, directory) def BrowserFile(self): file = tkFileDialog.askopenfilename(title='Python Image Dealer', filetypes=[('JPG','*.jpg'),('BMP','*.bmp'), ('GIF','*.gif'),('PNG','*.png')]) if file: self.entryFile.delete(0, Tkinter.END) self.entryFile.insert(Tkinter.END, file) def OnCheckM(self): if not self.mstatus.get(): self.entryDir.config(state=Tkinter.DISABLED) self.entryFile.config(state = Tkinter.NORMAL) self.buttonBrowserDir.config(state=Tkinter.DISABLED) self.buttonBrowserFile.config(state=Tkinter.NORMAL) else: self.entryDir.config(state=Tkinter.NORMAL) self.entryFile.config(state = Tkinter.DISABLED) self.buttonBrowserDir.config(state=Tkinter.NORMAL) self.buttonBrowserFile.config(state=Tkinter.DISABLED) def OnCheckF(self): if not self.fstatus.get(): self.rBmp.config(state = Tkinter.DISABLED) self.rJpg.config(state = Tkinter.DISABLED) self.rGif.config(state = Tkinter.DISABLED) self.rPng.config(state = Tkinter.DISABLED) else: self.rBmp.config(state = Tkinter.NORMAL) self.rJpg.config(state = Tkinter.NORMAL) self.rGif.config(state = Tkinter.NORMAL) self.rPng.config(state = Tkinter.NORMAL) def Conv(self): n = 0 if self.mstatus.get(): path = self.entryDir.get() if path == "": tkMessageBox.showerror('Python Tkinter', 'Please input path') return filenames = os.listdir(path) if self.fstatus.get(): f = self.Image.get() for filename in filenames: if file[-3:] in ('bmp', 'jpg', 'gif', 'png'): self.addlogo(path+'/'+filename, f) n=n+1 else: for filename in filenames: if filename[-3:] in ('bmp', 'jpg', 'gif', 'png'): self.addlogo(path+'/'+filename) n=n+1 else: file = self.entryFile.get() if file == "": tkMessageBox.showerror('Python Tkinter', 'Please select file') return if self.fstatus.get(): f = self.Image.get() self.make(file, f) n=n+1 else: self.make(file) n=n+1 self.status.set('success add %d image' %n) def make(self, file, format = None): im = Image.open(file) mode = im.mode if mode not in ('L', 'RGB'): im = im.convert('RGB') width, height = im.size s = self.entryNew.get() if s == '': tkMessageBox.showerror('Python Tkinter', 'Please input percent') return else: n = int(s) nwidth = width * n / 100.0 nheight = height * n / 100.0 thumb = im.resize((nwidth,nheight),Image.ANTIALIAS) if format: im.save(file[:(len(file)-4)]+'_thumb.'+format) else: im.save(file[:(len(file)-4)]+'_thumb'+file[-4:])window = Window()window.MainLoop()
输入缩放参数并选取待转换的文件
配置参数
输出图片
- 为图片添加Logo
# -*- coding:utf-8 -*-#import osfrom PIL import Image # import Imageimport Tkinterimport tkFileDialogimport tkMessageBoxclass Window: def __init__(self): self.root = root = Tkinter.Tk() self.Image = Tkinter.StringVar() self.status = Tkinter.StringVar() self.mstatus = Tkinter.IntVar() self.fstatus = Tkinter.IntVar() self.pstatus = Tkinter.IntVar() self.Image.set('bmp') self.mstatus.set(0) self.fstatus.set(0) self.pstatus.set(0) label = Tkinter.Label(root, text = 'Logo') label.place(x = 5, y = 5) self.entryLogo = Tkinter.Entry(root) self.entryLogo.place(x = 55, y = 5) self.buttonBrowserLogo = Tkinter.Button(root, text = 'Browser', command = self.BrowserLogo) self.buttonBrowserLogo.place(x = 200, y = 5) self.checkM = Tkinter.Checkbutton(root, text = 'Bat Conv', command = self.OnCheckM, variable = self.mstatus, onvalue = 1, offvalue=0) self.checkM.place(x = 5, y = 30) label = Tkinter.Label(root, text = 'Choose Files') label.place(x = 5, y = 55) self.entryFile = Tkinter.Entry(root) self.entryFile.place(x = 55, y = 55) self.buttonBrowserFile = Tkinter.Button(root, text = 'Browser', command = self.BrowserFile) self.buttonBrowserFile.place(x = 200, y = 55) label = Tkinter.Entry(root, state = Tkinter.DISABLED) label.place(x = 5, y = 80) self.entryDir = Tkinter.Entry(root, state = Tkinter.DISABLED) self.entryDir.place(x = 55, y = 80) self.buttonBrowserDir = Tkinter.Button(root, text ='Browser', command = self.BrowserDir, state = Tkinter.DISABLED) self.buttonBrowserDir.place(x = 200, y = 80) self.checkF = Tkinter.Checkbutton(root, text = 'Change File Format', command = self.OnCheckF, variable = self.fstatus, onvalue=1, offvalue = 0) self.checkF.place(x = 5, y = 110) frame = Tkinter.Frame(root) frame.place(x = 10, y = 130) labelTo = Tkinter.Label(frame, text = 'Format') labelTo.pack(anchor='w') self.rBmp = Tkinter.Radiobutton(frame, variable = self.Image, value = 'bmp', text = 'BMP', state = Tkinter.DISABLED) self.rBmp.pack(anchor='w') self.rJpg = Tkinter.Radiobutton(frame, variable = self.Image, value = 'jpg', text = 'JPG', state = Tkinter.DISABLED) self.rJpg.pack(anchor='w') self.rGif = Tkinter.Radiobutton(frame, variable = self.Image, value = 'gif', text = 'GIF', state = Tkinter.DISABLED) self.rGif.pack(anchor='w') self.rPng = Tkinter.Radiobutton(frame, variable = self.Image, value = 'png', text = 'PNG', state = Tkinter.DISABLED) self.rPng.pack(anchor='w') pframe = Tkinter.Frame(root) pframe.place(x = 70, y = 130) labelPos = Tkinter.Label(pframe, text = 'Location') labelPos.pack(anchor = 'w') self.rLT = Tkinter.Radiobutton(pframe, variable = self.pstatus, value = 0, text = 'Left Top') self.rLT.pack(anchor = 'w') self.rRT = Tkinter.Radiobutton(pframe, variable = self.pstatus, value = 1, text = 'Right Top') self.rRT.pack(anchor = 'w') self.rLB = Tkinter.Radiobutton(pframe, variable = self.pstatus, value = 2, text = 'Left bottom') self.rLB.pack(anchor = 'w') self.rRB = Tkinter.Radiobutton(pframe, variable = self.pstatus, value = 3, text = 'Right bottom') self.rRB.pack(anchor = 'w') self.buttonAdd = Tkinter.Button(root, text = 'Add', command = self.Add) self.buttonAdd.place(x = 180, y = 175) self.labelStatus = Tkinter.Label(root, textvariable = self.status) self.labelStatus.place(x = 150, y = 205) def MainLoop(self): self.root.minsize(250, 250) self.root.minsize(250, 250) self.root.mainloop() def BrowserLogo(self): file = tkFileDialog.askopenfilename(title='Python Image Dealer', filetypes=[('JPG','*.jpg'),('BMP','*.bmp'), ('GIF','*.gif'),('PNG','*.png')]) if file: self.entryLogo.delete(0, Tkinter.END) self.entryLogo.insert(Tkinter.END, file) def BrowserDir(self): directory = tkFileDialog.askdirectory(title='Python') if directory: self.entryDir.delete(0, Tkinter.END) self.entryDir.insert(Tkinter.END, directory) def BrowserFile(self): file = tkFileDialog.askopenfilename(title='Python Image Dealer', filetypes=[('JPG','*.jpg'),('BMP','*.bmp'), ('GIF','*.gif'),('PNG','*.png')]) if file: self.entryFile.delete(0, Tkinter.END) self.entryFile.insert(Tkinter.END, file) def OnCheckM(self): if not self.mstatus.get(): self.entryDir.config(state=Tkinter.DISABLED) self.entryFile.config(state = Tkinter.NORMAL) self.buttonBrowserDir.config(state=Tkinter.DISABLED) self.buttonBrowserFile.config(state=Tkinter.NORMAL) else: self.entryDir.config(state=Tkinter.NORMAL) self.entryFile.config(state = Tkinter.DISABLED) self.buttonBrowserDir.config(state=Tkinter.NORMAL) self.buttonBrowserFile.config(state=Tkinter.DISABLED) def OnCheckF(self): if not self.fstatus.get(): self.rBmp.config(state = Tkinter.DISABLED) self.rJpg.config(state = Tkinter.DISABLED) self.rGif.config(state = Tkinter.DISABLED) self.rPng.config(state = Tkinter.DISABLED) else: self.rBmp.config(state = Tkinter.NORMAL) self.rJpg.config(state = Tkinter.NORMAL) self.rGif.config(state = Tkinter.NORMAL) self.rPng.config(state = Tkinter.NORMAL) def Add(self): n = 0 if self.mstatus.get(): path = self.entryDir.get() if path == "": tkMessageBox.showerror('Python Tkinter', 'Please input path') return filenames = os.listdir(path) if self.fstatus.get(): f = self.Image.get() for filename in filenames: if file[-3:] in ('bmp', 'jpg', 'gif', 'png'): self.addlogo(path+'/'+filename, f) n=n+1 else: for filename in filenames: if filename[-3:] in ('bmp', 'jpg', 'gif', 'png'): self.addlogo(path+'/'+filename) n=n+1 else: file = self.entryFile.get() if file == "": tkMessageBox.showerror('Python Tkinter', 'Please select file') return if self.fstatus.get(): f = self.Image.get() self.addlogo(file, f) n=n+1 else: self.addlogo(file) n=n+1 self.status.set('success conv %d image' %n) def addlogo(self, file, format = None): logo = self.entryLogo.get() if logo == "": tkMessageBox.showerror('Python Tkinter', 'Please select Logo') return im = Image.open(file) lo = Image.open(logo) imwidth = im.size[0] imheight = im.size[1] lowidth = lo.size[0] loheight = lo.size[1] pos = self.pstatus.get() if pos == 0: left = 0 top = 0 right = lowidth bottom = loheight elif pos == 1: left = imwidth -lowidth top = 0 right = imwidth bottom = loheight elif pos == 2: left = 0 top = imheight - loheight right = lowidth bottom = imheight else: left = imwidth-lowidth top = imheight-loheight right = imwidth bottom = imheight im.paste(lo, (left, top, right, bottom)) if format: im.save(file[:(len(file)-4)]+'_thumb.'+format) else: im.save(file[:(len(file)-4)]+'_thumb'+file[-4:])window = Window()window.MainLoop()
选取Logo以及待处理文件
配置选项
输出图片
什么是PIL
PIL(Python Imaging Library)为Python提供了强大的图形处理的能力,并支持多种图形文件格式。通过使用PIL模块,可以使用Python对图片进行处理。PIL已经停止更新,现替换为Pillow!
阅读全文
0 0
- 【脚本语言系列】关于Python图像处理PIL,你需要知道的事
- 【脚本语言系列】关于Python图像处理scikits-image, 需要知道的事
- 【脚本语言系列】关于Python系统管理,你需要知道的事
- 【脚本语言系列】关于Python容器,你需要知道的事
- 【脚本语言系列】关于Python音频处理DirectSound, 你需要知道的事
- 【脚本语言系列】关于Python数据库处理SQLite,你需要知道的事
- 【脚本语言系列】关于Python数据库处理MySQL, 你需要知道的事
- 【脚本语言系列】关于Python基础知识处理字符串,你需要知道的事
- 【脚本语言系列】关于Python异常处理,你需要知道的事
- 【脚本语言系列】关于Python数据库处理SQLite数据库,你需要知道的事
- 【脚本语言系列】关于Python数据库处理SQLAlchemy,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理YAML,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理csv,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理xml,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理HTML,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理JSON,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理配置文件.ini,你需要知道的事
- 【脚本语言系列】关于Python结构化文本文件处理MsgPack,你需要知道的事
- Kotlin进行Android开发
- 创建openssl pfx证书文件
- struts2 result的type属性
- OpenGL ES零基础入门二绘制三角形
- 如何选择版本控制系统之二---Git的研发应用场景
- 【脚本语言系列】关于Python图像处理PIL,你需要知道的事
- 如何不绑定脚本且不继承MonoBehaviour做U3D的开发
- hibernate开发步骤
- MediaStream,AudioTrack,VideoTrack的关系
- 微信内嵌网页 签名生成 js-sdk开发
- 《ReactNative》之SectionList的简单使用
- 分支限界算法-BFS
- CSDN主办2017 OpenStack Days China将于7月在京召开!
- 拆分json数据,重组打包成新的json数组