Python3.4 tkinter,PIL图片转换


Posted in Python onJune 21, 2018

先给大家分享一下全部代码

import os
from PIL import Image
import tkinter
import tkinter.filedialog
import tkinter.messagebox

class Window():
  def __init__(self):
    self.root = root = tkinter.Tk()
    self.menu = tkinter.Menu(root)
    self.submenu = tkinter.Menu(self.menu, tearoff=0)
    self.submenu.add_command(label='作者: 王小涛同?W')
    root.config(menu=self.submenu)
    self.Image = tkinter.StringVar()
    self.Image.set('.bmp')
    self.mstatus = tkinter.IntVar()
    self.fstatus = tkinter.IntVar()
    self.mstatus.set(0)
    self.fstatus.set(0)
    self.status = tkinter.StringVar()
    self.label = tkinter.Label(root, text='输入百分比')
    self.label.place(x=5, y=5)
    self.entryNew = tkinter.Entry(root)
    self.entryNew.place(x=70, y=5)
    self.checkM = tkinter.Checkbutton(self.root, text='批量转换', command=self.OnCheckM, variable=self.mstatus, onvalue=1, offvalue=0)
    self.checkM.place(x=5, y=30)
    self.label = tkinter.Label(root, text='选择文件')
    self.label.place(x=5, y=55)
    self.entryFile = tkinter.Entry(root)
    self.entryFile.place(x=70, y=55)
    self.BrowserFileButton = tkinter.Button(root, text='浏览', command=self.BrowserFile)
    self.BrowserFileButton.place(x=220, y=55)
    self.label = tkinter.Label(root, text='选择目录')
    self.label.place(x=5, y=90)
    self.entryDir = tkinter.Entry(root, state=tkinter.DISABLED)
    self.entryDir.place(x=70, y=90)
    self.BrowserDirButton = tkinter.Button(root, text='浏览', command=self.BrowserDir, state=tkinter.DISABLED)
    self.BrowserDirButton.place(x=220, y=90)

    self.checkF = tkinter.Checkbutton(root, text='改变文件格式', onvalue=1, offvalue=0, variable=self.fstatus, command=self.OnCheckF)
    self.checkF.place(x=5, y=120)


    frame = tkinter.Frame(root, )
    frame.place(x=10, y=150)
    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.rPng = tkinter.Radiobutton(frame, variable=self.Image, value='.png', text='PNG', state=tkinter.DISABLED)
    self.rPng.pack(anchor='w')
    self.rGif = tkinter.Radiobutton(frame, variable=self.Image, value='.gif', text='GIF', state=tkinter.DISABLED)
    self.rGif.pack(anchor='w')
    self.ButtonCov = tkinter.Button(root, text='转换格式', command=self.Conv, )
    self.ButtonCov.place(x=120, y=180)
    self.statusLabel = tkinter.Label(root, textvariable=self.status, fg='red')
    self.statusLabel.place(x=80, y=220)




  def OnCheckM(self):
    if not self.mstatus.get():
      self.entryDir.config(state=tkinter.DISABLED)
      self.entryFile.config(state=tkinter.NORMAL)
      self.BrowserFileButton.config(state=tkinter.NORMAL)
      self.BrowserDirButton.config(state=tkinter.DISABLED)
    else:
      self.entryDir.config(state=tkinter.NORMAL)
      self.entryFile.config(state=tkinter.DISABLED)
      self.BrowserFileButton.config(state=tkinter.DISABLED)
      self.BrowserDirButton.config(state=tkinter.NORMAL)


  def OnCheckF(self):
    if not self.fstatus.get():
      self.rBmp.config(state=tkinter.DISABLED)
      self.rPng.config(state=tkinter.DISABLED)
      self.rJpg.config(state=tkinter.DISABLED)
      self.rGif.config(state=tkinter.DISABLED)
    else:
      self.rBmp.config(state=tkinter.NORMAL)
      self.rPng.config(state=tkinter.NORMAL)
      self.rJpg.config(state=tkinter.NORMAL)
      self.rGif.config(state=tkinter.NORMAL)


  def BrowserFile(self):
    file = tkinter.filedialog.askopenfilename(title='Python player', filetypes=[('JPG', '*.jpg'), ('BMP', '*.bmp'), ('GIF', '*.gif'), ('PNG', '*.png')])
    if file:
      self.entryFile.delete(0, tkinter.END)
      self.entryFile.insert(tkinter.END, file)

  def BrowserDir(self):
    directory = tkinter.filedialog.askdirectory(title='Python')
    if directory:
      self.entryDir.delete(0, tkinter.END)
      self.entryDir.insert(tkinter.END, directory)


  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 == '':
      tkinter.messagebox.showerror('出错啦', '请输入百分比')
      return
    else:
      n = int(s)
    nwidth = int(width*n/100)
    nheight = int(height*n/100)
    thumb = im.resize((nwidth, nheight), Image.ANTIALIAS)
    if format:
      thumb.save(file[:(len(file)-4)] + '_thumb' + format)
    else:
      thumb.save(file[:(len(file)-4)] + '_thumb' + file[-4:])


  def Conv(self):
    n = 0
    if self.mstatus.get():
      path = self.entryDir.get()
      if path == "":
        tkinter.messagebox.showerror('出错啦', '请选择路径')
        return
      filenames = os.listdir(path)
      if self.fstatus.get():
        f = self.Image.get()
        print(f)
        for filename in filenames:
          if filename[-3:] in ('bmp', 'jpg', 'gif', 'png'):
            self.make(path+'/'+filename, f)
            n += 1
      else:
        for filename in filenames:
          if filename[-3:] in ('bmp', 'jpg', 'gif', 'png'):
            self.make(path+'/'+filename)
            n += 1
    else:
      file = self.entryFile.get()
      if file == '':
        tkinter.messagebox.showerror('出错啦', '请选择文件')
        return
      if self.fstatus.get():
        f = self.Image.get()
        self.make(file, f)
        n += 1
      else:
        self.make(file)
        n += 1
    self.status.set('成功转换 %d 张图片' % n)





  def mainloop(self):
    self.root.minsize(280, 270)
    self.root.maxsize(280, 250)
    self.root.title('图片转换')
    self.root.mainloop()



if __name__ == "__main__":
  window = Window()
  window.mainloop()

运行后的实际效果如下

Python3.4 tkinter,PIL图片转换

感谢大家对三水点靠木的支持,欢迎提出宝贵意见。

Python 相关文章推荐
使用PYTHON创建XML文档
Mar 01 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
flask开启多线程的具体方法
Aug 02 Python
python/golang 删除链表中的元素
Sep 14 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
Django rest framework如何自定义用户表
Jun 09 Python
Python3实现转换Image图片格式
Jun 21 #Python
python3实现域名查询和whois查询功能
Jun 21 #Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 #Python
详解Python下ftp上传文件linux服务器
Jun 21 #Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 #Python
python实现黑客字幕雨效果
Jun 21 #Python
python实现内存监控系统
Mar 07 #Python
You might like
谈谈新手如何学习PHP
2006/12/14 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
WAF的正确bypass
2017/01/05 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
linux 下selenium chrome使用详解
2020/04/02 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
单位计划生育责任书
2015/05/09 职场文书
紧急迫降观后感
2015/06/15 职场文书