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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
Python面向对象特殊成员
Apr 24 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
python3实现单目标粒子群算法
Nov 14 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
opencv python图像梯度实例详解
Feb 04 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
python实现图片转字符画
Feb 19 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
jQuery live
2009/05/15 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python实现图像全景拼接
2020/03/27 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
Ajax和javascript的区别
2013/07/20 面试题
学期研究性学习个人的自我评价
2014/01/09 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
无房证明样本
2015/06/17 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL