用python做一个压缩图片的小程序

学生正在学习图像的编码与压缩,记录一下这个python小程序,给他们提供一下帮助。需要用到PIL库,记得安装:

pip install pillow

python 复制代码
import tkinter as tk
from tkinter import filedialog 
from PIL import Image
import tkinter.messagebox as messagebox

class ImageCompressor:
    def __init__(self, window):
        self.window = window
        self.window.title("图片压缩工具By ZYX 2023")

        self.source_path = tk.StringVar()
        self.output_path = tk.StringVar()

        frame1 = tk.Frame(window)
        frame1.pack(padx=5, pady=5)

        lbl_source = tk.Label(frame1, text="原始图片路径:")
        lbl_source.pack(side=tk.LEFT)

        entry_source = tk.Entry(frame1,textvariable=self.source_path, width=40)
        entry_source.pack(side=tk.LEFT)

        btn_source =tk.Button(frame1, text="打开", command=self.open_source_image)
        btn_source.pack(side=tk.LEFT)

        frame2 = tk.Frame(window)
        frame2.pack(padx=5, pady=5)

        lbl_output = tk.Label(frame2, text="输出图片路径:")
        lbl_output.pack(side=tk.LEFT)

        entry_output = tk.Entry(frame2,textvariable=self.output_path, width=40)
        entry_output.pack(side=tk.LEFT)

        btn_output =tk.Button(frame2, text="保存", command=self.save_output_image)
        btn_output.pack(side=tk.LEFT)

        quality_label = tk.Label(window, text='质量(1-95):')
        quality_label.pack(pady=5)

        self.quality_slider = tk.Scale(window, from_=1, to=95,
            length=400,tickinterval=19,
            orient='horizontal', resolution=1)
        self.quality_slider.set(80)
        self.quality_slider.pack()

        btn_compress =tk.Button(window, text="开始压缩", command=self.compress_image)
        btn_compress.pack(pady=10)

    def open_source_image(self):
        file_path = filedialog.askopenfilename()
        self.source_path.set(file_path)

    def save_output_image(self):
        file_path = filedialog.asksaveasfilename(defaultextension=".jpg")
        self.output_path.set(file_path)

    def compress_image(self):
        try:
            img = Image.open(self.source_path.get())
            img.save(self.output_path.get(), "JPEG", quality=self.quality_slider.get())
            messagebox.showinfo("成功", "图片压缩成功!")
        except Exception as e:
            messagebox.showerror("失败", f"压缩过程中发生错误:{e}")

if __name__ == '__main__':
    window = tk.Tk()
    app = ImageCompressor(window)
    window.mainloop()
相关推荐
一只栖枝1 分钟前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
fouryears_2341732 分钟前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~1 小时前
C#---StopWatch类
开发语言·c#
wuicer2 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
lifallen2 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
mit6.8243 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员3 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋4 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat