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小技巧之批量抓取美女图片
Jun 06 Python
Python中下划线的使用方法
Mar 27 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python opencv 图像拼接的实现方法
Jun 27 Python
python和c语言的主要区别总结
Jul 07 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
python实现大量图片重命名
Mar 23 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
5款实用的python 工具推荐
Oct 13 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 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
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python元组知识点总结
2019/02/18 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python属于跨平台语言码
2020/06/09 Python
查看keras的默认backend实现方式
2020/06/19 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
最新英语专业学生求职信范文
2013/09/21 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
清洁工岗位职责
2015/02/13 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
MySQL 原理与优化之Update 优化
2022/08/14 MySQL