logo 燕京驿站
  • 登录
  • 鲁大师最新卸载版(v6.1025.4130.103)2025年去广告

    鲁大师最新卸载版(v6.1025.4130.103)2025年去广告

    重要提醒:    运行下载好的文件前,一定要把电脑里之前所有鲁大师的版本彻底删除、清理干净后,再运行评测,不然会测试失败!至于报不报毒的见仁见智了,我能保证的是软件是官方的文件,个人仅作精简、绿化并无任何植入! 更新日志2025.01.04:同步更新为官方2025年第1版:6.1025.4130.1032025.01.01:同步更新为官方2024年 终版:6.1024.4125.1226 一、精简说明    基于官方最新版 6.1025.4130.103 版本的基础上做了极致的精简、绿化处理,在保留软件本身功能基本完整的前提下打包,最终形成了 101.3 MB可执行的单文件卸载版,也算不上大。    (一)删除“ 智慧选车”广告菜单,删除“清理优化”功能菜单里的微信专清和QQ专清并添加荣耀主题图标;    未登陆为非会员有“大师排行、屏幕检测、功耗估算、监控面板、Win11更新检测”这几个功能无法使用,而会员登陆后即可正常使用这些功能并可以换荣耀的几个主题图标,其它无异;    (二)截止目前,驱动检测功能的驱动安装不限速,驱动备份、驱动还原、驱动搜索、驱动卸载等功能正常;    (三)完整精简了软件自身无用的后台进程,不会自启也不会后台自动运行更不会自动安装各种流氓插件、软件;(要彻底屏蔽此功能需要进阶修改!)    (四)不想用了随时点开始菜单里的"卸载鲁大师"按提示操作即可完整的卸载;这个卸载版和之前制作的自解压自清除版区别在:自清除版无法彻底清除残留的注册表信息和临时文件;而这个卸载版卸载后无残留的注册表信息、临时文件!其它功能与之前制作的精简版基本一样。当然也可以手动删除了!但残留的注册表信息、临时文件你得用清理软件清理很是麻烦,就显得多此一举了。 二、进阶教程    若真正要实现绝无广告的话,还得诸君自行动手对以下的几个文件、文件夹的系统属性,进行终极修改(如果你的安全选项用户列表下的“允许”、“拒绝”选项是灰色的,说明你的用户权限不够,要在安全选项下的高级→所有者→更改→高级→立即查找→在立即查找的用户列表里找到→Everyone→更改完成后并确定→返回编辑里→在拒绝下的所有用户都要把拒绝“写入”勾选上→再回到高级里→找到“禁用继承”,点确定后即可操作;效果原理是:在不破坏官方原文件签名的前提下做到:有效限制可执行文件和读写文件的后台活动范围,有效解除出现的广告、自动升级、自动安装无用插件软件等流氓行为):    (一)C:\LuDaShi下的“computercenter.exe”、“ComputerZTray.exe”,C:\LuDaShi\Utils下的“web_host.exe”,这 3 个文件分别对其文件属性进行设置:右击→安全→编辑→组或用户名(G)→XXX(对应相应的用户名)权限→允许→在允许选项里:仅选“读取和执行”、“读取”;拒绝→在拒绝选项里:仅选“写入”(组或用户名下有几个用户就要依次的选拒绝“写入”);    (二)C:\LuDaShi下的“Utils”文件夹,在运行完1次“硬件评测”(就是先下载解压好测试文件,不然设置好后无法解压测试文件)后,右击“Utils”文件夹进行系统属性设置,设置方法同基本同上,在允许选项里仅勾选:“读取和执行”、“列出文件夹内容”、“读取”;在拒绝选项里仅选拒绝“写入”;设置好后,从此就真的无广告无插件流氓软件会自动安装了! 不进阶修改也可以正常使用的,一般情况下使用不会有升级、广告、插件安装等骚扰;但仍会有机率(从N次测试的各个WINDOWS系统数据来看,出现的概率为2%左右)出现上述的流氓行为,所以进阶修改(自进阶修改后从未出现过)是最稳妥的,一劳永逸。为何不直接修改官方源代码屏蔽这些无用的流氓行为呢?可以修改,但不会这么做,因为:一是修改官方源码那是侵版侵权,二是修改文件后会破坏官方的文件签名很多功能就无法正常运行也就无法正常使用了。 ------------------------------------------------------------------------------------- 这个是网友做的批处理教程,修改鲁大师权限的,提示:请在评测结束以后再运行这个批处理 @echo offecho 设置文件和文件夹权限... REM 设置文件权限 REM 设置 computercenter.exe 的权限icacls "C:\LuDaShi\computercenter.exe" /inheritance:r /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\computercenter.exe" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\computercenter.exe" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\computercenter.exe" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\computercenter.exe" /grant "Administrator:(RX)" /deny "Administrator:(W)" REM 设置 ComputerZTray.exe 的权限icacls "C:\LuDaShi\ComputerZTray.exe" /inheritance:r /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\ComputerZTray.exe" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\ComputerZTray.exe" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\ComputerZTray.exe" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\ComputerZTray.exe" /grant "Administrator:(RX)" /deny "Administrator:(W)" REM 设置 update 的权限icacls "C:\LuDaShi\update" /inheritance:r /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\update" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\update" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\update" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\update" /grant "Administrator:(RX)" /deny "Administrator:(W)" REM 设置 update.exe 的权限icacls "C:\LuDaShi\update.exe" /inheritance:r /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\update.exe" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\update.exe" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\update.exe" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\update.exe" /grant "Administrator:(RX)" /deny "Administrator:(W)" REM 设置 updatecfg.ini 的权限icacls "C:\LuDaShi\updatecfg.ini" /inheritance:r /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\updatecfg.ini" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\updatecfg.ini" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\updatecfg.ini" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\updatecfg.ini" /grant "Administrator:(RX)" /deny "Administrator:(W)" REM 设置 Utils\web_host.exe 的权限icacls "C:\LuDaShi\Utils\web_host.exe" /inheritance:r /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\Utils\web_host.exe" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\Utils\web_host.exe" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\Utils\web_host.exe" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\Utils\web_host.exe" /grant "Administrator:(RX)" /deny "Administrator:(W)" REM 禁用继承icacls "C:\LuDaShi\Utils" /inheritance:rREM 授予和拒绝权限icacls "C:\LuDaShi\Utils" /grant "Authenticated Users:(RX)" /deny "Authenticated Users:(W)"icacls "C:\LuDaShi\Utils" /grant "SYSTEM:(RX)" /deny "SYSTEM:(W)"icacls "C:\LuDaShi\Utils" /grant "Administrators:(RX)" /deny "Administrators:(W)"icacls "C:\LuDaShi\Utils" /grant "Users:(RX)" /deny "Users:(W)"icacls "C:\LuDaShi\Utils" /grant "Administrator:(RX)" /deny "Administrator:(W)" echo 权限设置完成!pause ---------------------------------------------------------------------------------------------------- MD5: 6A52E3724D61B1A325719F6AA4392E13

  • VMware-workstation-17.6.1个人免费版/免注册填信息

    VMware-workstation-17.6.1个人免费版/免注册填信息

    VMware-workstation-17.6.1对个人永久免费了 官网下载地址:https://www.broadcom.com/ 因为官网下载还要注册填信息,而且网页由于某种原因访问比较慢,就下载了最新的VMVARE搬运到网盘,有需要的自取。 查看产品信息。可以看到【仅限于个人用途】,没有过期限制。 选择个人用途,无需再填写注册码

  • 搜狗五笔/搜狗拼音/Sogou绿化版/无升级/无登录广告/输入法

    搜狗五笔/搜狗拼音/Sogou绿化版/无升级/无登录广告/输入法

    搜狗五笔SogouWBInput3.1.0.1751绿化版【19.5M】 搜狗五笔win10系统的绿化包【19.8M】 搜狗五笔SogouWBInput2.1.0.1586绿化版【15.7M】 搜狗拼音输入法绿化版v14.11.0.1351 Green【40.2M】 以管理员运行服务文件

  • 20250105迅雷/去除升级/去违规提示/精简绿色版

    20250105迅雷/去除升级/去违规提示/精简绿色版

    近来迅雷Thunder 11会提示升级、违规不能正常使用,现分享旧版迅雷Thunder复活办法及本人制作的迅雷Thunder 11.1.12.1692、11.2.2.1716 精简绿色版供同学们下载测试,不知能用多久,能用多久就用多久吧,且用且珍惜,办法总比困难多。 最新制作的测试可正常使用的“迅雷Thunder 11.1.12.1692 精简绿色版” 最新制作的测试可正常使用的“迅雷Thunder 11.2.2.1716 精简绿色版” 迅雷:链接: https://pan.baidu.com/s/1sKwMFMWPoL4Jl_bBVMPJkw 提取码: 5xqt  Thunder 11.2.2.1716 mini 主程序界面设置文件:链接: https://pan.baidu.com/s/1-XtGEAgQeywYviLbehqdjA 提取码: 65ps 使用方法:复制Program文件夹替换掉原main.js即为去掉右侧的边栏的mini主程序界面 “迅雷Thunder 11.1.12.1692 精简绿色版”把Thunder\Program\resources\app\plugins\VipDownload中的文件夹和config.json中的版本号改不一致就可以在设置中把取回变为10个不过那个抱团和自动插队这两个选项会消失{  "name": "vip-download",  "version": "4.8.0",  "author": "Xunlei",  "license": "",  "description": "",  "main": "4.8.0/index.js",  "clear": true} Thunder 11.1.12.1692 mini 主程序界面设置文件下载链接: https://pan.baidu.com/s/10OC1Xcf-eQ6bxjMwYjWosQ 提取码: 4s9z 使用方法:复制Program文件夹替换掉原main.js即为去掉右侧的边栏的mini主程序界面 注意:很多人说用一段时间会出现点问题 这里大家一定要注意 不要登录账号 不要登录账号 不要登录账号

  • 雷电模拟器v9.1.34解压版/去广告版/免安装

    雷电模拟器v9.1.34解压版/去广告版/免安装

    声明:此去广告版去掉开屏和内置广告丶去更新丶去搜索栏,去新游预约丶去在线杀毒,其余均为官网原版。雷电模拟器去广告版,仅为个人测试用,勿用于商业或非法行为,CN121概不负责!(不同意不要下载,下载即默认同意此条款) 说明:解压既玩,没有绿化步骤,可以和雷电模拟器v9.0共存.

  • QQ拼音输入法6.6.6304.400去广告去资讯去升级版

    QQ拼音输入法6.6.6304.400去广告去资讯去升级版

    基于官方安装包制作(并非重新打包,优点:更强的兼容性;缺点:体积大);删除代{过}{滤}理模块;删除错误崩溃程序;删除常驻后台服务程序;去除联网更新功能;去除“头条资讯”广告弹窗;默认皮肤设置为“经典传统皮肤”;默认关闭天气提示;预设候选行数为“6”;预设候选词数目为“9”;预设候选框排列方式为“竖排”;采用 Inno Setup 打包,支持静默安装,自行加参数.

  • 图片压缩工具视频压缩工具

    图片压缩工具视频压缩工具

    主要功能: 图片压缩: 允许用户通过拖放功能轻松压缩图片文件,减少文件大小,同时保持图片质量。 视频压缩: 支持视频文件的压缩,通过调整压缩率来优化视频大小,以适应不同的存储和传输需求。 压缩率调整: 提供100%的压缩率选项,用户可以根据需要调整压缩率,以找到最佳的文件大小和质量平衡点。 拖放操作: 用户可以通过拖放文件到软件界面来快速开始压缩过程,简化操作流程。 使用场景: 个人用户: 需要减少图片和视频文件大小,以便更轻松地存储或分享。 企业用户: 在需要优化文件大小以节省存储空间或提高传输效率时使用。 操作简便性: 界面简洁,易于导航。 支持拖放操作,无需复杂的设置或配置。 软件优势: 高效的压缩算法,确保文件在压缩后仍保持高质量。 用户友好的界面设计,使得即使是非技术用户也能轻松上手。 灵活的压缩率设置,满足不同用户的特定需求。

  • 国密SM4文件加解密工具

    国密SM4文件加解密工具

    注意:免费软件,未在其他电脑上做测试,也没有测试的条件,自行决定是否使用,对文件进行批量二进制读写可能会报病毒。在使用前还是建议大家找几个无用的文件试试是否可正常加密解密,然后再用来加解密有用的文件提醒:初次使用请重置SM4密钥,否则使用的是我写软件时默认的密钥,文件没有全部解密前,请不要删除数据库和软件,SM4密钥和IV一定要保存好文件加解密:文件加密是通过二进制读取文件的256个字节,然后对字节进行国密SM4加密并保存,从而实现快速加密的目的,它并不是完全加密,但是可以防止用户打开文件,需要注意的是密钥是明文保存在数据库中的,属于随机生成,所以不要去手动修改密钥,也需要保护好数据库,否则文件将无法解密。文件夹加解密:文件夹加密属于伪加密,并不会真正加密文件夹,先修改文件夹为畸形文件夹,使其不可访问,然后增加文件ALC规则,使everyone用户组不可读取,解密是先移除ALC规则,再把文件夹修改为正常的。前面写过一个文件夹加密小工具,后来发现只能加密文件夹还是有些功能单薄,就把重点放在文件加解密上了,但是文件加密存在一个问题,就是如果对文件整体进行加密的话,文件越大则加密速度越慢,并且加密后的文件体积也会变大,基本上就是分段读取-加密-保存-删除原文件这种操作,解密也是一样的,时间开销比较大,不符合大家的需求,那么就换一种思路,只读取文件的一部分,比如256个字节,然后对字节进行加密,再把加密后字节写回原来的位置,这样就无需对文件整体进行读写,自然速度也快,但是在二进制读取的方式下,从底层无法实现字节的查找替换,所以就要求加密前是256个字节的明文,那么加密后也一定得要是256个字节的密文才行,能符合这种要求的加密算法有经典密码算法、RC4加密、SM4加密等,RC4安全性较差,而SM4是国产加密算法,更好一些,SM4分为填充模式和无填充模式,在此只能选择无填充模式。文件加密从第10个字节开始进行读取,所以加密后的文件在外观上看和没加密时没有任何区别,文件大小也没有变化,只是无法打开使用了,同事看到你的文件打不开,只会认为你文件损坏不可用了,不会去想文件被加密了一部分,文件加密、解密时采用多线程进行处理,在执行加解密时不要对软件进行其他操作,可能会导致其他不可预知的错误,请耐心等待加密解完成后的提醒。不要对小文件进行加密,比如小于2k的文件,文件实际大小小于500个字节时,加密会出错,如果文件被占用,加密时也会出错,此版本只为实现功能,并未对细节进行处理。文件加解密时可以通过搜索文件名称或后缀名来查找你需要的文件,选中批量加解密后,点击加密和解密时将会对当前页面中显示的所有文件进行加解密。

  • 图片批量修改尺寸/图片批量格式转换

    图片批量修改尺寸/图片批量格式转换

    软件名称:熠点点·图片批量修改尺寸当前版本:1.2.0软件大小:v1.2新版本:57.7mb编程语言:python运行环境:Windows 图片本地批量修改尺寸 图片转换为png、bmp、webp、ico四种格式 单独转换格式,勾选转换格式,不填宽度高度。

  • 鼠标同步工具

    鼠标同步工具

    多个模拟鼠标,自己可以控制数量。这样就实现了模拟鼠标跟随物理鼠标。缺点有时间间隔,没法同时点击多个窗口。毕竟windows点击窗口要活动窗口才能点击。至于获取坐标大家可以自己用其他工具计算相对位置。

  • 图片压缩工具

    图片压缩工具

    在为网站上传图片时,经常会遇到对图片文件大小和分辨率的限制。为了确保图片符合这些要求而不失质量,图片压缩工具成为不可或缺的好帮手。这类工具不仅能够有效减小文件体积,还能保持图像的清晰度,确保网页加载速度不受影响。主要功能与优势:  1.智能压缩:利用先进的算法,在几乎不影响视觉效果的情况下减少图片文件的大小,确保图片符合网站的上传要求  2.格式转换:部分工具还提供格式转换功能,可以将图片转换为最适合网络使用的格式(如 JPEG、PNG 等多种图片格式),进一步优化文件大小。  3.自定义设置:允许用户调整压缩级别,根据具体需求平衡图片质量和文件大小。  4.即时预览:一些工具提供即时预览功能,让用户可以在压缩前后对比图片质量,确保最终效果满意。 代码源码在页面最下方,有需要的可以自行修改研究。 import os import re import tkinter as tk from tkinter import filedialog, messagebox, ttk from PIL import Image, ImageTk, UnidentifiedImageError import threading import logging # 设置日志配置 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') class ImageCompressorApp: def __init__(self, root): self.root = root self.root.title("图片压缩工具 by ke") self.root.geometry("1024x650") self.root.configure(bg="#f0f0f0") # 初始化变量 self.image_path = None # 图片路径 self.output_location = None # 输出位置 self.target_size_kb = tk.IntVar(value=400) # 默认目标大小为400KB self.new_filename = tk.StringVar() # 新文件名 self.output_format = tk.StringVar(value="JPG") # 修改默认输出格式为JPG # 创建界面元素 self.create_widgets() def create_widgets(self): main_frame = tk.Frame(self.root, bg="#f0f0f0") main_frame.pack(expand=True, fill='both', padx=20, pady=20) # 文件选择和预览 img_frame = tk.Frame(main_frame, bg="#f0f0f0") img_frame.pack(fill='x') self.img_label = tk.Label(img_frame, text="请加载一张图片", bg="#f0f0f0") self.img_label.pack(side=tk.LEFT, padx=10, pady=10) browse_button = tk.Button(img_frame, text="选择图片...", command=self.browse_files) browse_button.pack(side=tk.RIGHT, padx=10, pady=10) # 目标大小输入框 size_frame = tk.Frame(main_frame, bg="#f0f0f0") size_frame.pack(fill='x', pady=5) tk.Label(size_frame, text="目标大小 (KB):", bg="#f0f0f0").pack(side=tk.LEFT, padx=5) self.size_entry = tk.Entry(size_frame, textvariable=self.target_size_kb, width=10) self.size_entry.pack(side=tk.LEFT, padx=5) # 设置新文件名 filename_frame = tk.Frame(main_frame, bg="#f0f0f0") filename_frame.pack(fill='x', pady=5) tk.Label(filename_frame, text="新文件名:", bg="#f0f0f0").pack(side=tk.LEFT, padx=5) tk.Entry(filename_frame, textvariable=self.new_filename, width=30).pack(side=tk.LEFT, padx=5) # 选择输出格式 format_frame = tk.Frame(main_frame, bg="#f0f0f0") format_frame.pack(fill='x', pady=5) tk.Label(format_frame, text="输出格式:", bg="#f0f0f0").pack(side=tk.LEFT, padx=5) format_combobox = ttk.Combobox(format_frame, textvariable=self.output_format, values=["JPG", "JPEG", "PNG", "BMP", "GIF"], width=10) format_combobox.current(0) # 设置默认选中项为第一个选项,即"JPG" format_combobox.pack(side=tk.LEFT, padx=5) # 输出位置选择 output_frame = tk.Frame(main_frame, bg="#f0f0f0") output_frame.pack(fill='x', pady=5) tk.Label(output_frame, text="输出位置:", bg="#f0f0f0").pack(side=tk.LEFT, padx=5) self.output_location_var = tk.StringVar() tk.Entry(output_frame, textvariable=self.output_location_var, width=50).pack(side=tk.LEFT, padx=5) tk.Button(output_frame, text="选择...", command=self.select_output_location).pack(side=tk.LEFT, padx=5) # 创建一个容器用于放置压缩并保存按钮和进度条 bottom_frame = tk.Frame(self.root, bg="#f0f0f0") bottom_frame.pack(side=tk.BOTTOM, fill='x', pady=20) # 压缩并保存按钮 compress_button = tk.Button(bottom_frame, text="压缩并保存", command=self.start_compress_and_save) compress_button.pack(side=tk.LEFT, padx=10) # 进度条放在最下方 self.progress = ttk.Progressbar(bottom_frame, orient="horizontal", length=700, mode="determinate") self.progress.pack(side=tk.RIGHT, padx=10) def load_image(self, path): """加载并显示图片预览""" try: self.image_path = path img = Image.open(path) img.thumbnail((300, 300)) self.photo = ImageTk.PhotoImage(img) self.img_label.config(image=self.photo) except Exception as e: logging.error(f"加载图片时出错: {str(e)}") self.show_message("错误", f"加载图片时出错: {str(e)}") def browse_files(self): """打开文件对话框选择图片""" filename = filedialog.askopenfilename( title="选择图片", filetypes=[("Image files", "*.png *.jpg *.jpeg *.bmp *.gif")] ) if filename: self.load_image(filename) def select_output_location(self): """选择图片压缩后的输出位置""" directory = filedialog.askdirectory(title="选择输出位置") if directory: self.output_location_var.set(directory) def start_compress_and_save(self): """启动压缩线程并在UI上显示进度条""" self.progress["value"] = 0 # 初始化进度条为0% self.progress["maximum"] = 100 # 设置进度条的最大值为100% compress_thread = threading.Thread(target=self.compress_and_save) compress_thread.start() def compress_and_save(self): """执行图片压缩并保存到指定位置""" try: if not self.image_path or not self.output_location_var.get(): self.show_message("警告", "请选择图片和输出位置!") return new_filename = sanitize_filename(self.new_filename.get().strip()) if not new_filename: self.show_message("警告", "请输入有效的文件名!") return output_filename = f"{new_filename}.{self.get_output_extension()}" output_path = os.path.join(self.output_location_var.get(), output_filename) # 检查输出路径有效性 if not os.path.isdir(self.output_location_var.get()): logging.error(f"输出位置不存在: {self.output_location_var.get()}") self.show_message("错误", "选择的输出位置无效,请重新选择。") return # 检查是否有写权限 if not os.access(self.output_location_var.get(), os.W_OK): logging.error(f"没有写入权限: {self.output_location_var.get()}") self.show_message("错误", "没有足够的权限在选择的位置写入文件。") return target_size_kb = self.target_size_kb.get() original_size_kb = os.path.getsize(self.image_path) / 1024 if original_size_kb <= target_size_kb: self.show_message("提示", "原图大小已经小于或等于目标大小,无需压缩。") return self.compress_image(self.image_path, output_path, target_size_kb) self.set_progress_value(100) # 完成后设置进度条为100% self.show_message("成功", "图片已成功压缩并保存!") except Exception as e: logging.error(f"压缩失败: {str(e)}") self.show_message("错误", f"压缩失败: {str(e)}") finally: self.progress.stop() def compress_image(self, image_path, output_path, target_size_kb): """压缩图片至指定大小""" try: img = Image.open(image_path).convert('RGB') # 确保图片模式兼容 quality = 95 original_size_kb = os.path.getsize(image_path) / 1024 format_name = self.get_output_format() # 获取正确的格式名称 while original_size_kb > target_size_kb and quality >= 10: try: img.save(output_path, format=format_name, optimize=True, quality=quality) original_size_kb = os.path.getsize(output_path) / 1024 quality -= 5 self.update_progress(quality) except IOError as e: logging.error(f"IO 错误: {str(e)}") raise ValueError(f"IO 错误: {str(e)}") except Exception as e: logging.error(f"保存图片时出错: {str(e)}") raise ValueError(f"保存图片时出错: {str(e)}") if original_size_kb > target_size_kb: raise ValueError("无法将图片压缩到指定大小!请尝试增加目标大小或减少图片复杂度。") except UnidentifiedImageError: logging.error("无法识别的图片格式") self.show_message("错误", "无法识别的图片格式,请选择其他图片。") except Exception as e: logging.error(f"压缩图片时出错: {str(e)}") self.show_message("错误", f"压缩图片时出错: {str(e)}") def get_output_extension(self): """根据输出格式返回正确的文件扩展名""" format_name = self.output_format.get().upper() if format_name in ["JPG", "JPEG"]: return "jpg" elif format_name == "PNG": return "png" elif format_name == "BMP": return "bmp" elif format_name == "GIF": return "gif" else: return "jpg" def get_output_format(self): """根据输出格式返回正确的Pillow格式名称""" format_name = self.output_format.get().upper() if format_name in ["JPG", "JPEG"]: return "JPEG" elif format_name == "PNG": return "PNG" elif format_name == "BMP": return "BMP" elif format_name == "GIF": return "GIF" else: return "JPEG" def update_progress(self, quality): """更新进度条的值""" max_quality = 95 min_quality = 10 progress_value = ((max_quality - quality) / (max_quality - min_quality)) * 100 self.root.after(0, lambda: self.set_progress_value(min(progress_value, 100))) def set_progress_value(self, value): """设置进度条的值""" self.progress["value"] = value def show_message(self, title, message): """显示消息框并停止进度条""" self.root.after(0, lambda: messagebox.showinfo(title, message)) def sanitize_filename(filename): """清理文件名中的非法字符""" return re.sub(r'[\\/*?:"<>|]', "", filename) if __name__ == "__main__": root = tk.Tk() app = ImageCompressorApp(root) root.mainloop()

  • 新款模仿广告弹窗上班摸鱼工具

    新款模仿广告弹窗上班摸鱼工具

    更新:增加跳转 上一个 下一个 功能按键 在编辑框处粘贴目录地址,单击按钮,新增页数显示 ,输入页数(超出目录数字会运行错误),单击跳可直接跳转该页面,新增上一个下一个 按键。 内置浏览器等级较低 请在其他浏览器复制播放地址再粘贴到编辑框内访问

  • 车机搭建工程模式dns、开启adb小工具、哈弗三代H6、一代大狗、坦克300

    车机搭建工程模式dns、开启adb小工具、哈弗三代H6、一代大狗、坦克300

    本工具只在windows10系统上测试通过,因为使用PowerShell命令查找热点适配器,理论win10和win11都可以用 环境需要一个笔记本和一部手机使用教程:  1、笔记本连接手机热点,电脑开启热点 2、打开软件后会自动搜索电脑热点占用ip,一般都是192.168.137.1.如果不是可以手动输入到本机热点IP框中  3、依次点击更新IP、修改hosts文件 4、确认自己车机系统是华阳还是安波福,确认方式帮助里有  5、选择对应系统的工程模式的apk,也可以自定义文件  6、车机关闭流量功能,连接电脑热点,在车机界面找到"智能手册",成功的话会提示升级,点按升级,就成功安装工装模式了! 

1 2 3
赣ICP备2024051835号-2 | 赣公网安备36012102000813号
powered by Cn121
  • 首页
  • 复制图片URL
  • 复制
  • 刷新
  • 前进
  • 后退

  • 站内搜索
  • 百度搜索
sitemap