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+mysql实现简单的web程序
Sep 11 Python
Python返回真假值(True or False)小技巧
Apr 10 Python
python开发之文件操作用法实例
Nov 13 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
python-opencv 将连续图片写成视频格式的方法
Jan 08 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
Python列表与元组的异同详解
Jul 02 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
基于python实现雪花算法过程详解
Nov 16 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
基于Python实现对比Exce的工具
Apr 07 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
php unlink()函数使用教程
2018/07/12 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Django添加favicon.ico图标的示例代码
2018/08/07 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
python列表的逆序遍历实现
2020/04/20 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
python中如何使用虚拟环境
2020/10/14 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
法律专业推荐信范文
2013/11/29 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
学术会议主持词
2014/03/17 职场文书
离婚财产分配协议书
2014/10/21 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
详解Vue的列表渲染
2021/11/20 Vue.js
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
关于Python中进度条的六个实用技巧分享
2022/04/05 Python