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&MongoDB爬取图书馆借阅记录
Feb 05 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Django开发的简易留言板案例详解
Dec 04 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python从子线程中获得返回值的方法
Jan 30 Python
python操作日志的封装方法(两种方法)
May 23 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
python实现滑雪游戏
Feb 22 Python
用python绘制樱花树
Oct 09 Python
python 星号(*)的多种用途
Sep 21 Python
Python控制鼠标键盘代码实例
Dec 08 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 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/03 新手入门
php在文件指定行中写入代码的方法
2012/05/23 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
How to Auto Include a Javascript File
2007/02/02 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python地图绘制实操详解
2019/03/04 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
三八节标语
2014/06/27 职场文书
2016春节家属慰问信
2015/03/25 职场文书
小学教师工作总结2015
2015/04/07 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
农村老人去世追悼词
2015/06/23 职场文书
七一活动主持词
2015/06/29 职场文书
培训感想范文
2015/08/07 职场文书
2016国庆促销广告语
2016/01/28 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技