python利用tkinter实现图片格式转换的示例


Posted in Python onSeptember 28, 2020

代码

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='作者:君莫笑')
    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()

运行效果:

python利用tkinter实现图片格式转换的示例

以上就是python利用tkinter实现图片格式转换的示例的详细内容,更多关于python 图片格式转换的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现单词拼写检查
Apr 25 Python
Python中编写ORM框架的入门指引
Apr 29 Python
win10系统中安装scrapy-1.1
Jul 03 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
几种实用的pythonic语法实例代码
Feb 24 Python
python实现俄罗斯方块
Jun 26 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
Python阶乘求和的代码详解
Feb 14 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
Python实现简单的俄罗斯方块游戏
Sep 25 Python
python在CMD界面读取excel所有数据的示例
Sep 28 #Python
python调用摄像头的示例代码
Sep 28 #Python
python 调用API接口 获取和解析 Json数据
Sep 28 #Python
记录一下scrapy中settings的一些配置小结
Sep 28 #Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 #Python
详解scrapy内置中间件的顺序
Sep 28 #Python
Python爬虫代理池搭建的方法步骤
Sep 28 #Python
You might like
第十二节 类的自动加载 [12]
2006/10/09 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
django中的ajax组件教程详解
2018/10/18 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
python实现画图工具
2020/08/27 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
创业计划书之餐饮
2019/09/02 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP