吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1952|回复: 23
收起左侧

[原创工具] 【图片有损压缩工具1.0】(单文件附python源码)

[复制链接]
aifeisheng 发表于 2024-5-3 00:19
本帖最后由 aifeisheng 于 2024-5-3 00:31 编辑

图片有损压缩工具用户手册
image.png

1. 简介本工具是一个独立的单文件应用程序,使用Python编写,具备图形用户界面(GUI),旨在帮助用户对图片进行有损压缩,以减少图片文件的大小。该工具支持JPEG、PNG、BMP和GIF等常见图片格式。
2. 系统要求
  • 操作系统:Windows
3. 运行程序
  • 确保系统满足上述系统要求。
  • 从分发渠道下载图片有损压缩工具的单文件版本。
  • 直接双击下载的单文件应用程序即可启动程序,无需进行任何安装步骤。
4. 使用说明
4.1 启动程序双击单文件应用程序,程序的主界面将自动打开。
4.2 选择图片点击界面上的“选择图片”按钮,从本地文件系统中选择需要压缩的图片文件。
4.3 预览图片选择图片后,程序界面将显示所选图片的缩略图预览。
4.4 设置压缩级别通过界面上的滑块设置压缩级别。滑块的值从1到99,数值越大,压缩级别越高,图片质量越低。数值为1时,会反向压缩。
4.5 选择保存位置点击“浏览...”按钮,选择压缩后图片的保存位置。如果不进行选择,压缩后的图片将保存在与原图片相同的目录下。
4.6 压缩图片完成压缩级别和保存位置的设置后,点击“压缩图片”按钮以开始压缩过程。
4.7 查看结果压缩完成后,程序将弹出一个信息框告知用户压缩成功,并提供压缩后图片的保存路径。
5. 故障排除
  • 如果在压缩过程中遇到错误,请检查所选图片文件是否有效,以及是否有写入所选保存路径的权限。
  • 如果应用程序没有响应,尝试重启程序或计算机。
6. 联系与支持如有任何问题或需要技术支持,请联系开发者。
烂走:https://wwl.lanzn.com/ibujm1xgy1kb
密码:hk46

百度L:https://pan.baidu.com/s/1DZ1wBpO9m_QD1BkOG82z_g?pwd=aifs
提取码:aifs

源码:
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox, StringVar
from tkinter import ttk
from PIL import Image, ImageTk
import os
from datetime import datetime

class ImageCompressorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("图片有损压缩工具 by aifeisheng")
        self.selected_save_dir = StringVar(value="")
        self.file_path = None

        # 设置窗口的默认大小为屏幕尺寸的50%
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        default_width = int(screen_width * 0.5)
        default_height = int(screen_height * 0.5)
        self.root.geometry(f"{default_width}x{default_height}+{int((screen_width - default_width)/2)}+{int((screen_height - default_height)/2)}")

        # 主要容器
        main_frame = ttk.Frame(root)
        main_frame.grid(row=0, column=0, sticky="nsew")

        # 左侧选项区域
        options_frame = ttk.Frame(main_frame, padding="20")
        options_frame.grid(row=0, column=0, sticky="nsew")

        # 图片选择按钮
        self.select_button = ttk.Button(options_frame, text="选择图片", command=self.select_file)
        self.select_button.grid(row=0, column=0, padx=5, pady=5, sticky="ew")

        # 压缩级别标签
        label_quality = ttk.Label(options_frame, text="压缩级别:")
        label_quality.grid(row=1, column=0, padx=5, pady=5, sticky="ew")

        # 压缩质量选择
        self.quality_scale = ttk.Scale(options_frame, from_=1, to=99, orient=tk.HORIZONTAL, command=self.update_quality_label)
        self.quality_scale.set(50)  # 默认压缩级别为50
        self.quality_scale.grid(row=1, column=1, padx=5, pady=5, sticky="ew")

        # 压缩质量标签
        self.quality_label_var = StringVar()
        self.quality_label = ttk.Label(options_frame, textvariable=self.quality_label_var)
        self.quality_label.grid(row=1, column=2, padx=5, pady=5, sticky="w")
        self.update_quality_label()  # 初始化标签文本

        # 压缩按钮
        self.compress_button = ttk.Button(options_frame, text="压缩图片", command=self.compress_image)
        self.compress_button.grid(row=2, column=0, columnspan=3, padx=5, pady=5, sticky="ew")

        # 保存位置标签
        save_dir_label = ttk.Label(options_frame, text="保存位置:")
        save_dir_label.grid(row=3, column=0, padx=5, pady=5, sticky="ew")

        # 保存位置输入框
        self.save_dir_entry = ttk.Entry(options_frame, textvariable=self.selected_save_dir)
        self.save_dir_entry.grid(row=3, column=1, columnspan=2, padx=5, pady=5, sticky="ew")

        # 浏览按钮
        self.browse_button = ttk.Button(options_frame, text="浏览...", command=self.choose_save_dir)
        self.browse_button.grid(row=4, column=0, columnspan=3, padx=5, pady=5, sticky="ew")

        # 右侧预览区域
        self.preview_frame = ttk.Frame(main_frame, padding="10", borderwidth=2, relief="flat", style="Preview.TFrame")
        self.preview_frame.grid(row=0, column=1, sticky="nsew")

        self.preview_label = ttk.Label(self.preview_frame, text="图片预览:", anchor="w")
        self.preview_label.pack(side=tk.TOP, fill=tk.X, padx=5, pady=5)

        self.image_panel = tk.Label(self.preview_frame, bg="white", width=300, height=300)
        self.image_panel.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        # 设置背景颜色
        self.root.config(bg="#F5F5F5")
        self.preview_frame.config(style="Preview.TFrame")

    def select_file(self):
        self.file_path = filedialog.askopenfilename(
            title="选择图片文件",
            filetypes=[("图片文件", "*.jpg;*.jpeg;*.png;*.bmp;*.gif")]
        )
        if self.file_path:
            self.show_preview()
            self.selected_save_dir.set(os.path.dirname(self.file_path))  # 默认保存在图片相同目录

    def show_preview(self):
        if self.file_path:
            img = Image.open(self.file_path)
            img.thumbnail((300, 300))  # 调整图片大小以适应预览窗口
            img_tk = ImageTk.PhotoImage(img)

            self.preview_label.config(image=img_tk)
            self.preview_label.image = img_tk  # 保持对图像的引用

    def choose_save_dir(self):
        save_dir = filedialog.askdirectory(title="选择保存位置")
        if save_dir:
            self.selected_save_dir.set(save_dir)  # 更新保存目录

    def compress_image(self):
        if not self.file_path:
            messagebox.showwarning("未选择文件", "请先选择一个图片文件。")
            return

        quality = 100 - int(self.quality_scale.get())  # 转换为压缩质量

        if not 1 <= quality <= 99:
            messagebox.showerror("错误", "无效的压缩级别设置。")
            return

        try:
            save_dir = self.selected_save_dir.get()
            if not save_dir:
                save_dir = os.path.dirname(self.file_path)  # 如果没有选择保存目录,使用图片所在的目录

            new_file_path = self.do_image_compression(quality, save_dir)
            messagebox.showinfo("压缩完成", f"图片压缩完成!\n新文件路径: {new_file_path}")
        except Exception as e:
            messagebox.showerror("错误", f"压缩过程中发生错误: {e}")

    def do_image_compression(self, quality, save_dir):
        img = Image.open(self.file_path)
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        file_extension = os.path.splitext(self.file_path)[1]
        new_file_name = os.path.splitext(os.path.basename(self.file_path))[0] + f"_{timestamp}_comp{file_extension}"
        new_file_path = os.path.join(save_dir, new_file_name)

        if img.format == "JPEG":
            img.save(new_file_path, optimize=True, quality=quality)
        else:
            new_img = img.convert('RGB')
            new_img.save(new_file_path, format='JPEG', quality=quality)

        return new_file_path

    def update_quality_label(self, *args):
        quality = int(self.quality_scale.get())
        self.quality_label_var.set(f"({quality})")

if __name__ == "__main__":
    root = tk.Tk()
    app = ImageCompressorApp(root)
    root.mainloop()

免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
forever5678 + 1 + 1 热心回复!
xn8023 + 1 + 1 谢谢@Thanks!
大大连连 + 1 + 1 谢谢@Thanks!
wuai22222 + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

1e3e 发表于 2024-12-5 15:22
出错了,
/home/q9/miniforge3/bin/python /home/q9/.config/JetBrains/PyCharmCE2022.3/scratches/scratch_3.py
Exception in Tkinter callback
Traceback (most recent call last):
  File "/home/q9/miniforge3/lib/python3.12/tkinter/__init__.py", line 1968, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "/home/q9/.config/JetBrains/PyCharmCE2022.3/scratches/scratch_3.py", line 143, in update_quality_label
    self.quality_label_var.set(f"({quality})")
    ^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'ImageCompressorApp' object has no attribute 'quality_label_var'
dfdndz1 发表于 2024-5-3 19:06
大佬可不可给我写个识别图片并点击的小软件,我的要求在下面

我用的是按键精灵不能完全识别图片,因为网上的播放符号有各种各样的颜色出现,我现在的要求是只要屏幕上出现那个形状的播放符号就点击,视频就开始播放,一直到屏幕上又出现    任务点完成   就去查找     下一节  图片,并点击,重复上面的步骤。播放符号及流程图片在这个网址里https://f.ws59.cn/f/dyp5hldgy34 ,麻烦那位大佬写一写代码并编译成成品,万分感谢。有现成的、好用的图片识别并点击的软件也可以,如果币不够,可以增加,谢谢好心大佬 。
头像被屏蔽
pj666a 发表于 2024-5-3 12:57
zhao520li 发表于 2024-5-3 13:16
太感谢了,正需要呢
100308223 发表于 2024-5-3 14:10
谢谢分享,不错
lopk666 发表于 2024-5-3 15:20
有用的软件,感谢分享
pheige 发表于 2024-5-3 16:51
实用的工具!谢谢分享!
wipj 发表于 2024-5-3 16:58
下来试了一下,PNG图片压缩后,扩展名虽然是PNG,但本质是JPG。
a85401234 发表于 2024-5-3 18:15
感谢分享!收藏一下~
dlfy 发表于 2024-5-4 02:27
很实用的工具!感谢楼主的分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 09:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表