上次写的这个用小于99行的python代码实现批量图片格式转换(带GUI)

这个功能是实现了,不过界面太难看,花了点时间改了下界面,用的tkinter

实现了几种常见图片格式相互转换并输出:webp,jpg,png,bmp

贴几张运行效果好了:

需要安装pillow,其他的坑可以看看之前的文章,这里就不赘述了。

pip install pillow

这里直接贴代码了,一共也就不到200行,功能比较简单。该有的注释也有

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askdirectory as ad
import tkinter.messagebox as msgbox
import os
from PIL import ImageXXXX = '''图像格式批量转换小工具,
可以对选择的文件夹内所有图片进行批量转换,并输出到新文件夹内。
-----------------by pirate7777777-----------------
'''
# 需要转换的文件格式 其他支持的格式也可以加进去如'.tif',不过没测试,不知道会出什么问题
IMG_TARGETS = ['.webp', '.jpg', '.png', '.bmp']
TITLE = "图片格式批量转换"  # 窗口标题
DISLAY_SIZE = "600x300"
DEFAULT_PATH = os.getcwd()  # 缺省目录选择
DEFAULT_IPADX = 10  # 水平方向内边距
DEFAULT_IPADY = 10  # 垂直方向内边距
DEFAULT_PADX = 10  # 水平方向外边距
DEFUALT_PADY = 10  # 垂直方向外边距
ENTRY_IPADX = 2  # 文本框水平方向内边距
ENTRY_IPADY = 2  # 文本框垂直方向内
pb = None  # 进度条class Convert:def __init__(self, **kw):self.workpath = kw["workpath"]self.outpath = kw["outpath"]self.img_tar = kw["img_tar"]self.img_exp = kw["img_exp"]global pb# 遍历文件夹,返回所有符合的图片路径到列表内def getImages(self):file_list = []for home, _dirs, files in os.walk(self.workpath):for fi in files:_name, end = os.path.splitext(fi)if end.lower() in self.img_tar:file_list.append(os.path.join(home, fi))return file_list# 转换图片def convertImage(self, input_name):if not (os.path.exists(self.outpath)):os.makedirs(self.outpath)basename = os.path.basename(input_name)  # 文件名filename, _end = os.path.splitext(basename)  # 分离文件名与扩展名output_name = os.path.join(self.outpath, filename + self.img_exp)  # 拼接输出的文件名,带路径im = Image.open(input_name)im.load()  # required for png.split()# TODO# https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html#fully-supported-formats# im.convert('RGB')if im.mode == "RGBA":  # jpgbackground = Image.new("RGB", im.size, (255, 255, 255))background.paste(im, mask=im.split()[3])  # 3 is the alpha channelim = backgroundim.save(output_name)  # pillow可以自动通过后缀推断文件名print('==>', output_name, '\n>>done!\n')def run(self):if (self.workpath is None):return [False, '请选择文件夹']if (self.outpath is None):return [False, '请选择输出文件夹']img_list = self.getImages()size = len(img_list)if (size == 0):return [False, '没有可转换的图像']for i in range(size):self.convertImage(input_name=img_list[i])# 更新进度条pb["value"] = 100 * (i + 1) / sizeroot.update()return [True, '转换完成!']# 主界面GUIclass MyGUI:def __init__(self, master):self.root = tk.Frame(master)self.path_wrok = tk.StringVar()self.path_out = tk.StringVar()self.img_exp = tk.StringVar()self.img_exp.set('.webp')self.path_out.set(DEFAULT_PATH+'\\out')self.createPage()def createPage(self):self.root.pack()# 第0行 备用tk.Label(self.root, text=XXXX).grid(column=0, row=0, columnspan=6, pady=DEFUALT_PADY)# 第1行 工作目录lbl_workpath = tk.Label(self.root, text="选择文件夹:")lbl_workpath.grid(column=0, row=1, pady=DEFUALT_PADY,padx=DEFAULT_PADX)# textvariable和StringVar的path_wrok绑定txt_workpath = tk.Entry(self.root, textvariable=self.path_wrok, width=40)txt_workpath.grid(column=1, row=1, columnspan=3, pady=DEFUALT_PADY,padx=DEFAULT_PADX, ipady=ENTRY_IPADY, ipadx=ENTRY_IPADX)btn_workpath = ttk.Button(self.root, text="选择", command=lambda: self.workpath_clicked())btn_workpath.grid(column=5, row=1, pady=DEFUALT_PADY,padx=DEFAULT_PADX, ipadx=DEFAULT_IPADX)# 第2行 输出目录lbl_outpath = tk.Label(self.root, text="输出文件夹:")lbl_outpath.grid(column=0, row=2, pady=DEFUALT_PADY, padx=DEFAULT_PADX)# textvariable和StringVar的path_out绑定txt_outpath = tk.Entry(self.root, textvariable=self.path_out, width=40)txt_outpath.grid(column=1, row=2, columnspan=3, pady=DEFUALT_PADY,padx=DEFAULT_PADX, ipady=ENTRY_IPADY, ipadx=ENTRY_IPADX)btn_outpath = ttk.Button(self.root, text="选择",command=lambda: self.outpath_clicked())btn_outpath.grid(column=5, row=2, pady=DEFUALT_PADY,padx=DEFAULT_PADX, ipadx=DEFAULT_IPADX)# 第4行 转换格式/开始lbl_choose = tk.Label(self.root, text="选择输出的图像类型:")lbl_choose.grid(column=0, row=4, columnspan=2,pady=DEFUALT_PADY, padx=DEFAULT_PADX)# textvariable和StringVar的img_exp绑定cb_choose = ttk.Combobox(self.root, values=IMG_TARGETS, textvariable=self.img_exp, width=30)cb_choose.grid(column=2, row=4, pady=DEFUALT_PADY,padx=DEFAULT_PADX, ipadx=DEFAULT_IPADX)btn_start = ttk.Button(self.root, text="开始",command=lambda: self.start_clicked())btn_start.grid(column=5, row=4, pady=DEFUALT_PADY,padx=DEFAULT_PADX, ipadx=DEFAULT_IPADX)# 第6行 进度。。。global pbpb = ttk.Progressbar(self.root, length=500, cursor='spider',mode="determinate", orient=tk.HORIZONTAL)pb.grid(column=0, row=6, columnspan=6,pady=DEFUALT_PADY, padx=DEFAULT_PADX)def workpath_clicked(self):self.path_wrok.set(ad(title="请选择需要转换的文件夹", initialdir=DEFAULT_PATH, mustexist=True))def outpath_clicked(self):self.path_out.set(ad(title="请选择输出文件夹", initialdir=DEFAULT_PATH, mustexist=True))def start_clicked(self):result = Convert(workpath=self.path_wrok.get(), outpath=self.path_out.get(),img_tar=IMG_TARGETS, img_exp=self.img_exp.get()).run()if result[0]:msgbox.showinfo(title=TITLE, message=result[1])else:msgbox.showerror(title=TITLE, message=result[1])if __name__ == '__main__':root = tk.Tk()root.title(TITLE)root.geometry(DISLAY_SIZE)MyGUI(root)root.mainloop()

*参考文章:

1.用tkinter.pack设计复杂界面布局:https://blog.csdn.net/superfanstoprogram/article/details/83713196

2.Python笔记之Tkinter(Combobox下拉菜单)https://blog.csdn.net/xoofly/article/details/89716839

3.Python tkinter -- 第19章 进度条控件(Progressbar)https://blog.csdn.net/weixin_42272768/article/details/100876613

4.Python-Tkinter图形化界面设计(详细教程 )https://blog.csdn.net/RNG_uzi_/article/details/89792518

------------------------无聊的分割线--------------------------

我会告诉你我又改了点功能么?下载

把压缩图片的功能也带上吧,有的照片真的是太大了。

python tkinter 实现图片格式批量转换小工具相关推荐

  1. php图片转换软件,能能图片格式转换器 支持主流图片格式批量转换,简单实用的图片转换软件...

    今天给大家分享一个我平常用的能能图片格式转换器,这个能能图片格式转换器也是非常强大,集合所有图片格式,支持相互转换哦,能能图片格式转换器还有图片剪切,调整分辨率,添加水印等功能.在这里也推荐大家看一下 ...

  2. Python套壳ImageMagick实现图片格式批量转换

    最近疫情反复,堂姐被抽调到宣传部门发些稿件,发布平台要求图片必须是jpg格式,堂姐是个电脑盲,刚好最近在看入门Python的文章,写个转换图片格式的程序给她,她只要把程序放到有图片的文件夹里运行就好了 ...

  3. MATLAB对图片格式批量转换

    从网上下载一些数据集,发现是PPM或者PGM格式的,一般照片查看器打不开.可以用MATLAB对其进行批量转换格式.当然,任何两种格式之间相互转换都可以用这个程序: % 本示例程序将 pgm 图片转换为 ...

  4. 图片格式批量转换,批量处理

    转载:http://blog.sina.com.cn/s/blog_ba532aea0101bty5.html 你当然可以用 PhotoShop 或 GIMP 这样的软件来处理图像.没人禁止你这么做, ...

  5. ubuntu 图片格式批量转换,批量处理

    可以用 PhotoShop 或 GIMP 这样的软件来处理图像.没人禁止你这么做,就像没人禁止你用大炮打蚊子一样.不过依我看,打蚊子最好还是用电蚊拍,而要处理大量图像的话,我推荐 ImageMagic ...

  6. python (argparse库)图片转字符画小工具

    拷贝代码和图片在同一级目录下运行: from PIL import Image import argparseascii_char = list("$@B%8&WM#*oahkbdp ...

  7. python图片保存jpg、show变成bmp_Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中...

    Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中 我就废话不多说了,直接上代码吧! import Image from datetime import datetime impor ...

  8. 微信公众号图片素材一键删除小工具

    微信公众号图片素材上限100000,看似很多,但随着每天发文累计的图片素材会越来越多,一不小心就到达上限,便无法继续发文,这个时候就要承受老板的狂风怒火. 微信公众号后台带有素材图片批量删除功能,操作 ...

  9. 【kimol君的无聊小发明】—用python写图片格式批量处理工具

    [kimol君的无聊小发明]-用python写图片格式批量处理工具 前言 一.思路分析 二.调整尺寸 三.调整大小 四.整合代码 写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ ...

  10. Python写图片格式批量处理工具!你还一张一张转格式吗?

    前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码.我拍腿正坐,一个想法油然而生:"生活已然很无聊,不如再无聊些叭" ...

最新文章

  1. sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用...
  2. JS中进行字符串的相等比较时用==遇到的坑
  3. DRDS分布式SQL引擎—执行计划介绍
  4. 奇点汽车黄浴:SLAM的动态地图和语义问题
  5. mysql 优化 案例_[MySQL优化案例]系列 -- OPTIMIZE的威力
  6. php 向ldap请求文件,绑定 LDAP 目录 - PHP 7 中文文档
  7. ps画画模糊笔刷_如何用笔刷做出大神级效果?1000多款PS插画笔刷,简直就是你想要的神器...
  8. 腾讯通RTX发送文件出错的解决方法
  9. three.js 入门详解(一)
  10. Java实现对已有的PDF添加页码 加 总页码(二)
  11. java反射类型转换_Java反射探索研究(转)
  12. TextField及富文本框的用法
  13. 破解G*L**d2021.1.3
  14. 充电器用着用着就松了怎么办_充电接口松动及插不紧的解决方法,看完你就知道了...
  15. 微型计算机核心是主板和内存,低配也能轻松“吃鸡”!《绝地求生:大逃杀》CPU及内存需求测试...
  16. 扑克牌中的顺子(C++)
  17. c语言编写8个发光二极管循环右移,1、P1 口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。...
  18. 脑图神器 -- freemind
  19. 3分钟带你了解分时图的7种基本形态!
  20. Consider defining a bean of type ‘com.nclg.mall.service.AdminService‘ in your configuration.

热门文章

  1. origin做主成分分析图_Origin如何进行主成分分析
  2. NNT 抢任务 神器 V1.0.5
  3. 详解:淘宝大秒杀系统是如何设计的?
  4. 广东省的身份证号码开头
  5. PC解决电子签名的方法
  6. 《明朝那些事儿》心得体会
  7. Oracle GoldenGate for Oracle 11g(Solaris 10 x86-64) to Oracle 10g(CentOS 4.8) configuration
  8. Gitlab配置ssh key
  9. 电信显示isp服务器连不上,电信拨号上网连接不上的原因是什么
  10. 建筑建模学习笔记3——Vray渲染及PS修图