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()


  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用tkinter加载pngjpg图片可以通过PIL库来实现。具体步骤如下: 1. 安装PIL库:在命令行中输入pip install pillow进行安装。 2. 导入PIL库:在Python代码中导入PIL库,如下所示: from PIL import Image, ImageTk 3. 打开图片:使用Image.open()方法打开图片,如下所示: image = Image.open("image.png") 4. 将图片换为Tkinter可用的格式:使用ImageTk.PhotoImage()方法将图片换为Tkinter可用的格式,如下所示: photo = ImageTk.PhotoImage(image) 5. 在Tkinter窗口中显示图片:使用Label组件将图片显示在Tkinter窗口中,如下所示: label = tk.Label(root, image=photo) label.pack() 其中,root为Tkinter窗口对象。 ### 回答2: 可以使用tkinter中的PhotoImage模块加载并显示pngjpg等格式的图片。 首先,需要导入tkinter模块和PIL(Python Image Library)模块,如果没有安装PIL模块,可以使用以下命令进行安装: ``` pip install pillow ``` 然后,可以使用tkinter创建一个窗口,并使用PhotoImage模块加载图片,并将其作为背景或放置在窗口上: ```python import tkinter as tk from PIL import ImageTk, Image # 创建窗口 window = tk.Tk() # 加载图片 image = ImageTk.PhotoImage(file="image.png") # 加载png格式的图片 # image = ImageTk.PhotoImage(file="image.jpg") # 加载jpg格式的图片 # 将图片作为背景 background_label = tk.Label(window, image=image) background_label.place(x=0, y=0, relwidth=1, relheight=1) # 将图片放置在窗口上 image_label = tk.Label(window, image=image) image_label.pack() # 运行窗口 window.mainloop() ``` 通过以上代码,可以成功使用tkinter加载并显示pngjpg图片。 ### 回答3: 在使用tkinter加载pngjpg图片时,我们可以使用PIL库(Python Imaging Library)来实现。 首先,我们需要安装PIL库。可以使用pip命令来安装,命令如下: pip install pillow 然后,我们需要导入相关的模块,代码如下: from PIL import Image, ImageTk import tkinter as tk 接下来,我们需要创建一个Tk窗口,代码如下: root = tk.Tk() 然后,我们需要打开图片文件,可以使用PIL库中的Image.open()函数来打开图片,代码如下: image = Image.open("image.png") 接着,我们需要将图片换为Tkinter的PhotoImage类型,以便在Tkinter窗口中显示图片,代码如下: photo = ImageTk.PhotoImage(image) 然后,我们需要创建一个Label以显示图片,代码如下: label = tk.Label(root, image=photo) 最后,我们需要将Label显示在Tkinter窗口中,代码如下: label.pack() 最后,我们需要调用Tkinter的mainloop()函数来进入消息循环,以便显示窗口和图片,代码如下: root.mainloop() 通过以上步骤,我们就可以在Tkinter窗口中成功加载并显示pngjpg图片了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值