python和tkinter写的jpg和png图片互转小工具

前言

写了个简单的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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值