做查工资的网站/竞价排名名词解释
小编最近有一篇png图片要批量压缩,大小都在5MB之上,在网上找了半天要么就是有广告,要么就是有毒,要么就是功能复杂,整的我心烦意乱。
于是我自己用python写了一个纯净工具,只能压缩png图片,没任何广告。在windwos平台上使用。
指定的压缩质量:40
压缩前图片大小
压缩后图片大小
可以看到图片从5MB压缩到了 500KB。指定的质量还是降低,压缩尺寸效果还可以更大。
压缩前和压缩后图片对比
压缩前,大小5.7MB:
压缩后,大小861KB:
使用视频教程
png压缩
代码采用python编写,打包成了exe, 文件目录:
直接运行这个 "批量压缩png图片.exe" 即可。
下载地址:
https://gitee.com/lz-code/soft.git
部分代码展示
import tkinter as tk
from tkinter.filedialog import askdirectory
from tkinter.messagebox import *
import datetime
import _thread
from pathlib import Path
import osdef center_window(root, width, height):# 获取屏幕宽高screen_width = root.winfo_screenwidth()screen_height = root.winfo_screenheight()# 计算窗口左上角坐标x = (screen_width - width) // 2y = (screen_height - height) // 2# 设置窗口位置root.geometry(f'{width}x{height}+{x}+{y}')def count_files_with_extension(folder_path, extension1 , extension2):count = 0path = Path(folder_path)# 获取路径下的所有文件并打印文件名称for f in path.iterdir():if f.is_file():full_path = os.path.join(folder_path, f)source_name = full_pathif source_name.endswith(extension1) or source_name.endswith(extension2):count += 1return countdef open_img_dir(edit):path_ = askdirectory() # 使用askdirectory()方法返回文件夹的路径if path_ == "":pass# showerror('错误', '图片目录未选择')else:edit.insert(0,path_)def start_compress(entry_dir,entry_quality):img_dir = entry_dir.get()img_quality = entry_quality.get()if img_dir.strip() == "":showerror('错误', '图片目录未选择')returnif img_quality.strip() == "":showerror('错误', '压缩质量未设置')returntry:img_quality = int(img_quality)except:showerror('错误', '压缩质量只能是整数')returnif img_quality < 0 or img_quality > 100:showerror('错误', '压缩质量在0-100之间')returndef run(img_dir,img_quality):try:## 输出路径out_dir = img_dir+"/out"append_log("创建输入路径:" + out_dir)if not os.path.exists(out_dir):os.mkdir(out_dir)path = Path(img_dir)count = 0total = count_files_with_extension(img_dir,"png","PNG")btn_start.config(text="压缩中 0/"+str(total))btn_start.config(state=tk.DISABLED)# 获取路径下的所有文件并打印文件名称for f in path.iterdir():if f.is_file():full_path = os.path.join(img_dir, f)source_name = full_pathappend_log("作业压缩完成,存储:" + out_dir)btn_start.config(state=tk.NORMAL)btn_start.config(text="开始压缩")showinfo('提示', '恭喜! 图片压缩完成!')except Exception as e:import logginglogging.exception(e)append_log(str(e))btn_start.config(state=tk.NORMAL)btn_start.config(text="开始压缩")_thread.start_new_thread(run , (img_dir,img_quality))def append_log(log):current_time = datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")log = "["+current_time+"]# " + log + "\n"text.insert(tk.END, log + "\n")text.see(tk.END)root = tk.Tk()
root.title("批量PNG压缩 by 【轻量小工具工作室*QQ:3571289092】")
window_width = 500
window_height = 500
center_window(root, window_width, window_height)uiHeight = 30
padding = 20hint = tk.Label(root, text=" ★★★ 无收费,无广告,无毒,自主研发,联系开发可定制 ★★★")
hint.place(x=padding, y=0, width=400, height=uiHeight)hint2 = tk.Label(root, text="压缩质量")
hint2.place(x=padding, y=uiHeight+padding, width=100, height=uiHeight)entry_quality=tk.Entry(root,bd=2)
entry_quality.place(x=padding+100, y=uiHeight+padding, width=100, height=uiHeight)
entry_quality.insert(0,40)hint2 = tk.Label(root, text="0[差]-100[好]")
hint2.place(x=2*padding+2*100, y=uiHeight+padding, width=80, height=uiHeight)hint2 = tk.Label(root, text="PNG图片路径 ")
hint2.place(x=padding, y=2*uiHeight+2*padding, width=100, height=uiHeight)entry_dir=tk.Entry(root,bd=2)
entry_dir.place(x=padding+100, y=2*uiHeight+2*padding, width=300, height=uiHeight)btn = tk.Button(root, text ="选择...", command=lambda :open_img_dir(entry_dir))
btn.place(x=2*padding+100+300, y=2*uiHeight+2*padding, width=50, height=uiHeight)btn_start = tk.Button(root, text ="开始压缩", command=lambda :start_compress(entry_dir,entry_quality))
btn_start.place(x=padding+100, y=3*uiHeight+3*padding, width=150, height=uiHeight)## 滚动的日志text = tk.Text(root , bg='black', fg='white')
scrollbar = tk.Scrollbar(root, command=text.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
scrollbar.place(x=500-padding, y=4*uiHeight+4*padding, width=10, height=uiHeight)
text.place(x=padding, y=4*uiHeight+4*padding, width=500-2*padding, height=280)root.mainloop()
相关文章:

PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸
小编最近有一篇png图片要批量压缩,大小都在5MB之上,在网上找了半天要么就是有广告,要么就是有毒,要么就是功能复杂,整的我心烦意乱。 于是我自己用python写了一个纯净工具,只能压缩png图片,没任…...

【双十一特惠】腾讯云省钱攻略:如何智取云计算资源
前言 双十一不仅是购物的狂欢节,对于云计算用户来说,更是一个节省成本的绝佳时机。腾讯云,作为国内领先的云计算服务商,每年双十一都会推出一系列优惠活动。本文将为您揭开如何在这个购物节中,最大化利用腾讯云的优惠…...

爬虫学习8
Frida是一个动态代码插桩工具,允许开发者在运行时修改和调试应用程序 import ...:这行代码表示导入所需的模块或库,但具体的导入内容在图片中被省略了。 rdev frida.get_remote_device():这行代码获取一个远程设备实例ÿ…...

双指针算法的妙用:提高代码效率的秘密(2)
双指针算法的妙用:提高代码效率的秘密(2) 前言: 小编在前几日讲述了有关双指针算法两道题目的讲解,今天小编继续进行有关双指针算法习题的讲解,老规矩,今天还是两道题目的讲解,希望…...

笔记--(网络3)、交换机、VLAN
交换机 交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 交换机的…...

昇思大模型平台打卡体验活动:基于MindSpore实现GPT1影评分类
如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 大模型平台 平台说明 昇思大模型平台旨在为AI学习者和开发者提供在线学习的项目、模型、大模型体验和数据集的平台。我们也添加了各领域的经典数据集来帮助学习者解决AI学习过程中的一系列难题, 如…...

如何调整pdf的页面尺寸
用福昕阅读器打开pdf,进入打印页面,选择“属性”,在弹出的页面选择“高级” 选择你想调成的纸张尺寸,然后打印,打印出来的pdf就是调整尺寸后的pdf...

IDA*算法 Power Calculus————poj 3134
目录 闲聊 前言 DFS算法的无效搜索 BFS算法的空间浪费 IDDFS A*算法 IDA* Power Calculus 问题描述 输入 输出 问题分析 代码 闲聊 前几周在忙着数学竞赛,所以就没时间更新,高等数学,一生之敌,真不知道报名的时候我是怎么想…...

重磅!CoRL 2024顶刊会议 清华大学高阳研究组发布“基于大模型先验知识的强化学习”
正在德国举办的机器人研究领域的顶级学术会议CoRL 2024,清华大学交叉信息研究院高阳研究组发布重磅研究成果,提出“基于大模型先验知识的强化学习”框架(Reinforcement Learning with Foundation Priors) 来促进具身智能体在操作任务中的学习…...

泷羽sec学习打卡-Windows基础命令
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows的那些事儿-Base 一、Windows-BaseWindows有哪些版本呢,有什么区别呢?…...
RTC精度及校准
RTC精度偏差: RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。 一、硬件方面: 1.使用高精度振荡器的RTC模块; …...

jQuery案例
以下是几个常见的 jQuery 示例,展示了它在不同场景下的应用: 1. 隐藏和显示元素 通过按钮点击隐藏和显示一个 <div> 元素。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><met…...

常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式
目前开发的项目很大程度上是为明年的国产化做准备了,所以借这个机会把用了十年的自研系统全部重写,订立更严格的规范,本文记录一下返回格式及对应状态码。 常见 HTTP 状态码及解释 HTTP 状态码用于表示客户端请求的响应状态,它们…...

MySQL系列之如何在Linux只安装客户端
导览 前言Q:如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…...

内核设备树,你真的了解吗?
在嵌入式系统和内核开发中,设备树(Device Tree, 简称 DT)扮演着至关重要的角色,帮助系统在启动时准确识别硬件配置并匹配合适的驱动程序。虽然设备树应用广泛,但其结构、工作机制及应用细节却不总是被深入理解。本文将…...

MySQL:客户端工具创建数据库
MySQL 是一个开源的关系型数据库管理系统(RDBMS),用于存储、管理和检索数据。MySQL是基于SQL语言的,它具有高效、可靠、易用的特点。 客户端工具 这个mysqld.exe就在计算机安装的数据可服务,启动之后,mys…...

Linux笔记之pandoc实现各种文档格式间的相互转换
Linux笔记之pandoc实现各种文档格式间的相互转换 code review! 文章目录 Linux笔记之pandoc实现各种文档格式间的相互转换1.安装 Pandoc2.Word转Markdown3.markdown转html4.Pandoc 支持的一些常见格式4.1.输入格式4.2.输出格式 1.安装 Pandoc sudo apt-get install pandoc # …...

【iOS】知乎日报第三周总结
【iOS】知乎日报第三周总结 文章目录 【iOS】知乎日报第三周总结前言评论区文字评论区的一个展开效果评论区数据的一个请求修改了主页获取数据的逻辑主页无限轮播图图片主色调的一个获取将一些拓展部分的内容写在分类里小结 前言 本周笔者因为金工实习整个项目进展比较慢&#…...

【p2p、分布式,区块链笔记 Torrent】WebTorrent的add和seed函数
在【p2p、分布式,区块链笔记 Torrent】WebTorrent的上传和下载界面的示例中,主要通过WebTorrent类的add和seed函数实现相关功能。这两个函数都返回一个Torrent类对象的实例。 seed函数 import createTorrent, { parseInput } from create-torrent // &…...

Redis穿透、击穿、雪崩
redis是一款常用的非关系型数据库,我们常用与作为数据缓存的组件。 接下来介绍一下面试中常被问到的三个概念以及简单的解决方法。 穿透 什么叫缓存穿透 缓冲穿透,是当有一个请求过来时,查询redis缓存不存在,又去查询数据库&…...

VBA高级应用30例应用3在Excel中的ListObject对象:插入行和列
《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…...

2024系统架构师---上午综合题真题(重复考试知识难点)
1.感知层威胁 1)信息窃听:通过搭线或者电磁泄露造成数据隐私泄露;感知执行层主要由各种物理传感器组成,是整个物理信息系统中信息的来源。为了适应多变的环境,网络节点多布置在无人监管的环境中,因此容易被攻击者攻击,常见的针对感知执行层的攻击方式有; 2)感知破坏:…...

连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常
启动kafka后,连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 检查kafka运行日志,报The broker is trying to join the wrong clu…...

淘宝商品评论API:代码界的“买家秀”大揭秘
在淘宝这个神奇的购物天堂里,商品评论就像是隐藏的宝藏,等待着我们去挖掘。想象一下,如果你的代码能够自动获取这些评论,那岂不是像拥有了一台时光机,可以穿梭在买家的购物体验之中?今天,我们就…...

RabbitMQ队列详细属性(重要)
RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type:队列类型1.2、Name:队列名称1.3、Durability:声明队列是否持久化1.4、Auto delete: 是否自动删除1.5、Exclusive:1.6、Arguments:队列的其他属性…...

游戏服务器和普通服务器的区别
服务器,顾名思义,是提供服务的设备,在计算机领域,服务器是指具有网络功能的高性能计算机,用于存储、处理和传输数据,而游戏服务器则是专门为游戏提供服务的服务器,它需要具备更高的性能、更稳定…...

Java 中的 Supplier:让数据生成更灵活
文章目录 1. Supplier 基础:无参返回,懒加载的利器2. 与 Optional 配合,优雅地处理默认值3. 惰性初始化缓存:提升性能4. 用于随机数、时间戳等动态数据的生成5. 结合 Stream 实现动态数据流6. 与工厂模式结合,动态创建…...

轻松理解操作系统 - Linux的数据块是如何储存数据的?
python入门 C入门 Linux 由于其开源、比较稳定等特点统治了服务端领域。 也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。 因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经…...

青藤深度参编的终端安全国家标准正式发布
近日,国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告,由TC260(全国网络安全标准化技术委员会)归口,公安部第三研究所牵头的GB/T 29240-2024《网络安全技术 终端计算机通用安全技术规范》&…...

软考:去中心化的部署有什么特点
微服务架构被认为是去中心化的,因为它具有以下特点 模块化:微服务架构将应用程序拆分为一系列小型服务,每个服务都是独立的模块,易于维护和扩展 。这种模块化设计使得每个服务可以独立于其他服务运行,没有单一的控制中…...