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文件的方法
Aug 31 Python
python魔法方法-属性访问控制详解
Jul 25 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
Python装饰器用法实例总结
Feb 07 Python
Python实现基于POS算法的区块链
Aug 07 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
python如何将两张图片生成为全景图片
Mar 05 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
python 实现的IP 存活扫描脚本
Dec 10 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实现的四则运算表达式计算实现代码
2011/08/02 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
smarty简单入门实例
2014/11/28 PHP
php数据访问之增删改查操作
2016/05/09 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
用原生js做单页应用
2017/01/17 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
Python实现处理管道的方法
2015/06/04 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python实现进程同步和通信的方法
2018/01/02 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
安全生产月宣传标语
2014/10/06 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL
详解PyTorch模型保存与加载
2022/04/28 Python