Python3.4 tkinter,PIL图片转换


Posted in Python onJune 21, 2018

先给大家分享一下全部代码

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='作者: 王小涛同?W')
    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()

运行后的实际效果如下

Python3.4 tkinter,PIL图片转换

感谢大家对三水点靠木的支持,欢迎提出宝贵意见。

Python 相关文章推荐
python根据经纬度计算距离示例
Feb 16 Python
python中函数传参详解
Jul 03 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
Python及PyCharm下载与安装教程
Nov 18 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
python微信公众号开发简单流程
Mar 23 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
python 实现绘制整齐的表格
Nov 18 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
Python3实现转换Image图片格式
Jun 21 #Python
python3实现域名查询和whois查询功能
Jun 21 #Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 #Python
详解Python下ftp上传文件linux服务器
Jun 21 #Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 #Python
python实现黑客字幕雨效果
Jun 21 #Python
python实现内存监控系统
Mar 07 #Python
You might like
php模板函数 正则实现代码
2012/10/15 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
js实现拖拽效果
2015/02/12 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
python中实现字符串翻转的方法
2018/07/11 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
2014年五一促销活动方案
2014/03/09 职场文书
项目采购员岗位职责
2014/04/15 职场文书
加入学生会演讲稿
2014/04/24 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
聘任合同书
2015/09/21 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫