前言
写了个简单的jpg和png图片互转小工具,自己运行下就可以直接用
界面如图
直接上代码了哈
完整代码
代码如下(示例):
from tkinter import *
from tkinter.filedialog import *
from PIL import Image
# import imghdr
# imghdr 模块推测文件或字节流中的图像的类型。(已经弃用)
import os
current_folder = os.getcwd() # 获取当前文件夹(作为默认文件夹)
current_folder = f"{current_folder}\\data"
# jpg转png
def convert_image(input_path, output_path):
with Image.open(input_path) as img:
img.convert('RGB').save(output_path, 'PNG')
# png转jpg
def convert_png_to_jpg(png_image_path, jpg_image_path):
with Image.open(png_image_path) as image:
image.convert('RGB').save(jpg_image_path, 'JPEG', quality=100)
def upload_image():
# pass
# 读取图片打开图片
filetypes = (
('All files', '*'),
('JPG files', '*.jpg'),
('PNG files', '*.png'),
)
filename = askopenfilename(title='Open an image file', filetypes=filetypes)
# 显示图片路径
upload_text_var.set(filename)
# 保存文件的目录(修改原先默认值)
def save_file():
# pass
# 打开文件夹选择对话框
directory = askdirectory() # 用户选择的一个目录
if directory:
text_var.set(f"{directory}/")
# 开始转换
def start_change():
try:
# pass
# 获取上传图片路径
filename = upload_text_var.get()
# 获取保存图片目录
save_file_directory = text_var.get()
if not save_file_directory:
print("请选择保存的路径")
tip_text_var.set("----------请选择图片保存目录------------")
if not os.path.exists(save_file_directory):
os.makedirs(save_file_directory)
print(f"The directory {save_file_directory} was successfully created.")
if filename:
image_name = filename.split('/')[-1]
name = image_name.split('.')[0]
# print(name)
# pass
# 获取并显示图片格式
f = Image.open(filename)
pic_format = f.format.lower()
if pic_format == 'png':
convert_png_to_jpg(filename, f'{save_file_directory}/{name}.jpg')
if pic_format == 'jpeg':
convert_image(filename, f'{save_file_directory}/{name}.png')
print('转化完成')
tip_text_var.set("----------转化完成------------")
else:
print("请选择图片")
tip_text_var.set("----------请选择图片------------")
except Exception as e:
print(f"An error occurred: {e}")
# 打开特定目录
def open_directory():
default_directory = current_folder # 默认目录
save_file_directory = text_var.get() # 文件保存目录 (如果不存在则使用默认目录)
if save_file_directory:
# 如果目录不存在则需要创建(目录后面带斜杠/时无法创建)
if not os.path.exists(save_file_directory):
os.makedirs(save_file_directory)
save_dir = os.path.dirname(f"{save_file_directory}/")
print(save_dir)
os.system('start ' + save_dir)
else:
print('请选择保存的目录')
tip_text_var.set("----------选择保存的目录------------")
root = Tk()
root.title('jpg-png 图片互转工具')
root.geometry('500x350+500+300')
# 设置窗口被允许最小调整的范围,与resizble()冲突
root.minsize(500, 350)
"""
图片选择
"""
upload_btn = Button(root, text='选择图片', command=upload_image)
upload_btn.grid(pady=10, row=0, column=1)
# 创建一个StringVar对象,用于显示文件路径
upload_text_var = StringVar()
upload_text_var.set("")
upload_btn_file = Entry(root, textvariable=upload_text_var, width=50) # 第二列权重设为1,又拉伸了,所以可以不用设置宽度(宽度设置是没用的)
upload_btn_file.grid(padx=20, pady=5, ipady=5, row=1, column=1, sticky=E + W)
""""
选择图片保存目录
"""
save_btn = Button(root, text='选择图片保存目录(默认保存在软件所在同级目录)', command=save_file)
save_btn.grid(pady=10, row=2, column=1)
# 创建一个StringVar对象,用于存储文本框的内容
text_var = StringVar()
text_var.set(current_folder)
save_directory = Entry(root, textvariable=text_var, width=60)
save_directory.grid(padx=20, pady=5, ipady=5, row=3, column=1, sticky=E + W)
"""
确定转化
justify=CENTER 文本居中
"""
sure_btn = Button(root, text='开始转换', command=start_change, bg='#add8e6')
sure_btn.grid(pady=10, row=4, column=1)
tip_text_var = StringVar()
tip_text_var.set("")
tip = Entry(root, textvariable=tip_text_var, width=60, background='lightgray', foreground='red', justify=CENTER)
tip.grid(padx=20, pady=5, ipady=10, row=5, column=1, sticky=E + W)
"""
打开目录
"""
open_directory_btn = Button(root, text='打开图片保存目录', command=open_directory)
open_directory_btn.grid(pady=10, row=6, column=1)
root.grid_columnconfigure(1, weight=1)
root.mainloop()