python写文件格式转换程序_有趣的python小程序——图片格式转换

今日得闲,去上野的国立西洋美术馆逛了一圈。看到了印象派的好多名作,塞尚的《桥》,莫奈的《雪中的阿让特伊》、《睡莲》,毕沙罗的《收获》,马丁的《花与泉水》··。

拍了好多照片,想回来跟妹子分享一下。无奈mac版本微信一发raw格式图片就卡。AppStore搜了一圈格式转换软件都要花钱,于是一气之下,自己写了个格式转换的小程序,做了个tkinter的GUI,分分钟就转好了。

这个小程序长这样:

可以选择多个图片文件,自动识别源文件格式,然后可以在下拉菜单选择目标文件格式,支持nef,jpg,png,bmp,tiff,gif。等会代码放出来,大家有需要的可以自己改一改,添加需要的格式。然后选择输出的目标路径,点击开始转换,就可以转换了。底下的文本框会显示转换进度。(这个UI设计得可谓是相当简陋。不过随手写的,我也懒得弄多好看,好用就行。)

展示一下效果:

好了,少啰嗦,下面上代码。大家也可以在我的github上直接下载imageconverter.py:

import os

import re

from tkinter import *

from tkinter.filedialog import askdirectory,askopenfilenames

from tkinter import ttk

import rawpy

import imageio

def converter(img,targetdirect,i,num):

t.insert('end', '第' + str(i) + '/' + num + '件' + img + ' Converting \n')

print(img,targetdirect)

if os.path.exists(targetdirect)==True:

pass

else:

try:

raw=rawpy.imread(img)

raw_post = raw.postprocess()

except:

pass

else:

imageio.imsave(targetdirect, raw_post)

t.insert('end', '第' + str(i) + '/' + num + '件' + img + ' Finish \n')

# 主转换程序

def massconvert():

print(imgs, targetpath, targettype)

num = str(len(imgs))

i = 1

for img in imgs:

img_name = os.path.basename(img)

sourcetype=str(re.findall(r'\.[^.\\/:*?"<>|\r\n]+$', img_name)[0])

targetdirect = targetpath + '/' +re.sub(sourcetype,'.'+targettype,img_name)

converter(img, targetdirect,i,num)

i = i + 1

t.insert('end', '全部完成')

#GUI

def gotarget(*args): # 处理事件,*args表示可变参数

global targettype

targettype=targetformatlist.get()

print(targetformatlist.get())

def selectsourceimgs(): #获取源文件

global imgs

imgs=askopenfilenames()

e1.insert(0,imgs)

print(sourcepath)

def selecttargetPath(): #设定目标文件夹

global targetpath

targetpath = askdirectory()

e2.insert(0,targetpath)

print(targetpath)

window = Tk() #建立窗口

window.title('Image Converter') #标题

window.geometry('400x400') #大小

var2 = StringVar()

var3=StringVar()

var2.set(('NEF','jpg','png','tiff','bmp','GIF')) #为变量设置值

var3.set(('NEF','jpg','png','tiff','bmp','GIF')) #为变量设置值

#select source

Label(window,text = "源图片:").grid(row = 0, column = 1)

sourcepath=StringVar()

e1=Entry(window, textvariable = sourcepath)

e1.grid(row = 0, column = 2)

Button(window, text = "选择文件", command = selectsourceimgs).grid(row = 0, column = 3)

#select target directory

Label(window,text = "目标路径:").grid(row = 1, column = 1)

targetpath=StringVar()

e2=Entry(window, textvariable = targetpath)

e2.grid(row = 1, column = 2)

Button(window, text = "选择路径", command = selecttargetPath).grid(row = 1, column = 3)

#targetformatlist

Label(window,text = "目标图片类型:").grid(row = 3, column = 1)

targetformatlist = ttk.Combobox(window, textvariable=var3) # 初始化

targetformatlist.bind("<>", gotarget) # 绑定事件,(下拉列表框被选中时,绑定go()函数)

targetformatlist['values'] = ('NEF','jpg','png','tiff','bmp','GIF') # 设置下拉列表的值

#大家有需要的,可以在这里添加自己需要用的格式

targetformatlist.grid(column=2, row=3) # 设置其在界面中出现的位置 column代表列 row 代表行

targetformatlist.current(0) # 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值

#显示结果文本

t=Text(window,height=10,width=30,background = 'grey')

t.grid(row=6,column=2)

#开始转换按钮

Button(window, text = "开始转换", command = massconvert).grid(row = 3, column = 3)

#显示主窗口

window.mainloop()

好啦,谢谢大家的阅读。如果你喜欢我的文章,可以关注我的账号,后续还会有更多的更新。如果有什么建议,也欢迎在评论区留言,我会悉心听取。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值