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实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python聊天室实例程序分享
Jan 05 Python
python读取和保存视频文件
Apr 16 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
动易数据转成dedecms的php程序
2007/04/07 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
浅述python中深浅拷贝原理
2018/09/18 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
django model通过字典更新数据实例
2020/04/01 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
基于python实现操作redis及消息队列
2020/08/27 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
体育专业自荐书
2014/05/29 职场文书
2014年话务员工作总结
2014/11/19 职场文书
家庭贫困证明
2015/06/16 职场文书
《社戏》教学反思
2016/02/22 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers