Python 基于python实现的图片压缩助手

news/2025/10/12 21:58:20/文章来源:https://www.cnblogs.com/shouke/p/19134100

程序及源码下载地址:

https://gitee.com/ishouke/image-optimizer

图片压缩助手使用说明

适用环境

win11

imageOptimizer.zip

备注:win7可能存在兼容性问题,其它版本未验证

Centos7

imageOptimizer.tar

用途

批量压缩图片,开发时间有限,目前仅支持图片格式:.jpg, .jpeg, .png

使用方法

助手工具配置

image_optimizer.conf

[OPTIMIZER_CONF]
# ###### 通用配置 ######
# 压缩后的图片的存储路径 默认为当前目录下的 compressedImages目录
# 注意:如果指定了输出目录,会在该目录下,按文件所在路径,创建对应层级的目录结构,比如 output_dir设置为D:\testdir
# 检索到的文件在E:\somedir\subdir\target\file.png,那么压缩后的file.png位于 D:\testdir\somedir\subdir\target目录下# 注意:指定的输出目录不能是输入目录的子路径,否则会造成死循环(虽然代码已做判断),因为会在子目录下新建目录,导致遍历输入目录时,会无限遍历
output_dir =# 合法文件扩展名,如果有多个,英文逗号分隔
# 目前仅支持 .jpg, .jpeg, .png
valid_extensions = .jpg, .jpeg, .png# 最大线程数(默认: 本机cpu核数)
workers =# 是否遍历输入目录的子目录
# 1 -- 是  0 -- 否 默认为 0
traverse_sub_dir = 1# 是否支持正则识别待排除路径
# 1 -- 是  0 -- 否 默认为0
check_path_by_regex = 1# 输入文件名称是和源文件名保持一致
# 1 -- 是  0 -- 否 默认为 0  默认输出文件格式:源文件名(不带后缀)-compressed
# 注意:仅 override_src_image 不等于 1 该配置才有效
keep_name_unchanged = 0# 是否覆盖源图片
# 1 -- 覆盖 0 -- 不覆盖,默认为 0
# 注意:该配置项为1时,指定输出目录路径不起作用,即 output_dir 配置项不起作用
override_src_image = 0# 覆盖前是否备份源图片
# 1 -- 备份 0 -- 不备份,默认为 0 在文件所在目录下创建bak目录,然后拷贝源文件到该目录下
# 仅 override_src_image = 1 该配置才有效
backup_src_image = 1# 备份目录名称
backup_dir_name = bak# 过滤器--按大小过滤--文件大小大于等于该配置项的文件才压缩
# 单位KB,要求整数,默认为0
filter_file_size = 512###### 工具差异化配置 ######
# png压缩工具
# 可选值: pngquant  默认 pngquant(有损压缩)
png_comp_tool = pngquant# pngquant压缩命令模板
# 参数说明:
# -f | --force  强制覆盖已有的输出文件
# --skip-if-larger 仅在转换后的文件小于原始文件时保存
# --output {output_image_path} 指定输出图片路径
# --quality min-max 不保存低于最小值,高于最大值(0-100)时使用更少的颜色
# --speed N 表示速度与质量的权衡。1代表慢速,4代表默认速度,11代表快速且粗糙
# --nofs            禁用Floyd-Steinberg抖动算法
# --posterize N 输出低精度颜色(例如,用于ARGB4444输出)
# --strip 移除可选元数据(在Mac上默认为开启)
# 注意:{}为英文输入
pngquant_compress_cmd_template = {bin_tool} --force --skip-if-larger --speed 4 --output "{output_image_path}" "{input_image_path}"# jpg, jpeg 压缩工具
# 目前仅支持 cv2
jpg_comp_tool = cv2# jpg,jpeg cv2压缩配置
# 说明:
# -- 控制整体质量:数值越低,压缩率越高(文件越小),但画质损失越明显。 要求整数(0-100),默认值 95。适用所有 JPEG 压缩场景(核心参数)。
cv2_jpeg_quality = 42# 是否优化霍夫曼编码表(0=关闭,1=开启)
# 开启后可进一步减小文件体积(约 5-10%),但编码时间略增加。要求整数(0/1),默认值 1。适用需要更小文件体积时(推荐开启)
cv2_jpeg_optimize = 1# 是否生成渐进式 JPEG(0=基线 JPEG,1=渐进式)。渐进式 JPEG 加载时先显示模糊轮廓,再逐步清晰,适合网页。 要求整数(0/1),默认值 0。适用网页/移动端图片(需浏览器支持渐进式解码)。
cv2_jpeg_progressive =# 单独控制亮度(Luma)通道的质量。亮度对视觉影响更大,可优先降低此值以压缩。要求整数(0-100),无默认值。适用灰度图或颜色简单的图像(如监控截图)。
# 注意:配置该参数,该参数值越大,图片体积越大
cv2_jpeg_luma_quality =#单独控制色度(Chroma)通道的质量。色度对视觉敏感度较低,可大幅降低此值。要求整数(0-100),无默认值。适用颜色变化少的图像(如风景照、卡通图)。
cv2_jpeg_chroma_quality =

输入图片路径配置

待压缩图片所在目录路径

conf/image_path_included.conf

# 需要检索的路径,每行代表一个路径
# # 代表注释,空行或者注释会自动过滤
# 示例:D:\test、/opt/data/images

待排除图片路径配置

不需要压缩的图片所在目录路径、不需要压缩的图片文件路径

conf/image_path_excluded.conf

# 需要排除的路径,每行代表一个路径
# # 代表注释,空行或者注释会自动过滤
# 注意,配置支持目录、文件路径
# 示例:bak$ -- 以bak结尾的路径都排除

日志配置

一般不用改

conf/log.conf

[LOGGING]
log_file =
max_bytes_each = 512000
backup_count = 10
fmt = |(asctime)s |(filename)s[line: |(lineno)d] |(levelname)s: |(message)s
logger_name = test_logger
log_level_in_console = 10
log_level_in_logfile = 20
console_log_on = 1
logfile_log_on = 1[README]
log_level = '日志级别:CRITICAL = 50 ERROR = 40 WARNING = 30 INFO = 20 DEBUG = 10 NOTSET = 0'
log_on = 'console_log_on  = 1 开启控制台日志,0则关闭,logfile_log_on = 1 开启文件日志, 0则关闭'
log_file = 'log.txt所在的目录必须已存在'

运行

windows

cd imageOptimizer
imageOptimizer.exe

linux

# chmod +x bin_tools/pngquant
# ./imageOptimizer

命令行参数

工具支持部分命令行参数,例如以下:

./imageOptimizer --input_dir=/root/testdir --output_dir=/root/mydir

参数介绍:

  • --input_dir=image_dir_paths -- 待压缩图片所在目录路径,如果有多个采用英文逗号分隔(默认: inputImages
  • --output_dir=image_dir_paths -- 压缩后图片存储目录路径(默认: compressedImages
  • --workers=Num -- 最大线程数(默认: 本机cpu核数)
  • --png_comp_tool=tool -- png图片压缩工具, 默认pngquant
  • --jpg_comp_tool=tool -- jpg/jpeg图片压缩工具, 默认cv2
  • --traverse_sub_dir -- 是否遍历输入目录的子目录, 添加该参数,则表示遍历子目录
  • --check_path_by_regex -- 是否支持正则识别待排除路径。添加该参数则表示支持正则识别。
  • --override_src_image -- 是否覆盖源图片,添加该参数则表示覆盖。
  • --backup_src_image -- 覆盖前是否备份源图片, 添加该参数则表示备份。

注意:如果配置了命令行参数则以命令行参数为准,否则读取助手工具配置文件中对应参数配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20232302 2025-2026-1《网络与系统攻防技术》实验一实验报告

1.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常…

2023 ICPC ECfinal J

J. Travel 2 思维,模拟搜索。 如果从 \(u\) 选一条边到 \(v\),然后再从 \(v\) 又刚好选到一条边回来 \(u\),那么 \(u-v\) 这条边我们已经知道它分别在 \(u\) 和 \(v\) 里的排名了,一共有 \(m\) 条边,显然 \(2m\) …

嵌入式十六进制的地址转换成十进制MB单位

前言全局说明嵌入式开发经常会用到指定使用的内存区域大小或Flash存储芯片大小, 默认都是用16进制表示的,那么怎么换算成人在数学常用的10进制呢一、说明 1.1 基础知识: 在电脑中 0x 开头的都是十六进制表示法,我们…

编译qt【临时】

d:\qt1012\qtgitcode\Build\Work\qt5\qt5-build"..\configure.bat" -platform win32-g++ -xplatform oh-clang -device-option OHOS_ARCH=arm64-v8a -opensource -confirm-license -nom…

20232318 2025-2026-1 《网络与系统攻防技术》 实验一实验报告

一、实验目的本次实验聚焦于 Linux 平台下可执行文件 pwn1 的缓冲区溢出(BOF)漏洞挖掘与 shellcode 注入技术,核心目标是通过三种不同的技术路径篡改程序原有执行流程,从而触发程序中默认不可调用的 getShell 函数…

深入解析:在 CentOS 7.6 上安装 Oracle WebLogic Server 12c 详细教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实时Galgame - 动漫角色 语言生成+图片生成

文字转语音 看到B站推荐的视频,想了解到2025年10月最新文字转语言技术,并本地部署跑下 实时Galgame成了! IndexTTS2接入酒馆SillyTavern实时语音,角色语音情感控制,兼容酒馆API调用,B站开源最强AI语音模型 技术栈…

使用DiskGenius检查硬盘状态信息的与坏道检测

使用DiskGenius检查硬盘状态信息的与坏道检测1、下载DiskGenius工具官网下载地址:https://www.diskgenius.cn/download.php 2、解压DiskGenius工具包3、启动DiskGenius工具4、同意许可协议5、查看硬盘状态信息如上图所…

系统响应慢分析案例

响应很慢,这种情况下, 是不是系统资源出现 了瓶颈。所以,先观察 CPU、内存和磁盘 I/O 等的使用情况肯定不会错。应用程序记录大量日志 top ,来观察 CPU 和内存的使用情况观察 top 的输出,你会发现,CPU0 的使用率…

Linux文件系统与磁盘工作原理

磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。“Linux 一切皆文件”的深刻含义。无论是普通文件和块设备、还是网 络套接字和管道等,它们都通过统一的 VFS 接…

平安好车主小程序 充电站、加油站列表vmp+wasm逆向

pingan好车主小程序 充电站、加油站列表vmp+wasm逆向声明:仅供学习使用 1.接口概览 url: https://a1d5ce9f4-wx621112590b635086.sh.wxgateway.com/__wx__/call?token=97_6m4bQno7K7H4qamt18Bf8tj-i8zK8oFkQkSgh8N-_…

Linux文件系统的实验

Linux硬、软连接硬连接:指向了同一个物理位置。建立连接之后,INODE是一样的,引用的个数增加。删掉原始的文件,只是把引用删除了。下面图片的1和2就是指物理文件被引用的个数,删除其中一个引用个数就是1了。而且st…

Unity 虚拟仿真实验中设计模式的利用 —— 观察者模式(Observer Pattern)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

软中断softirq的CPU使用率升高

中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。中断其实是一种异步的事件处理机制,可以提高系统的并发处理能 力。 由于中断处理程序会打…

CPU多进程切换导致过载-CPU上下文切换

Linux 支持远大于 CPU 数量的任务同时运行。系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩…

Vue3 之pinia状态管理

一、文档 https://pinia.vuejs.org/zh/introduction.html 二、简单使用 main.jsimport { createApp } from vue import ./style.css import App from ./App.vue import router from ./router import { createPinia } f…

乐理 -01识谱

资料来源 B站up主 三分钟音乐社识谱音名音调 1=C1=D1=E1=F1=G1=A1=B黑键半音&全音 表示音调间的距离唱名规则 全全半全全全半1=C1=D

shader func

1、step:float step(float edge, float x) vec2 step(vec2 edge, vec2 x) vec3 step(vec3 edge, vec3 x) vec4 step(vec4 edge, vec4 x)GLSL 的 step 函数用于比较两个参数的大小,当第一个参数小于第二个参数时返回 …

案例分析-DDOS攻击、网络延迟(延迟确认纳格算法)、NAT延迟

DDoS 攻击 DDoS 的前身是 DoS(Denail of Service),即拒绝服务攻击,指利用大量的合理请求, 来占用过多的目标资源,从而使目标服务无法响应正常请求。 DDoS(Distributed Denial of Service) 则是在 DoS 的基础上…

服务器丢包分析-iptables规则-MTU大小设置错误-perf-火焰图分析处理请求时内核线程调用

服务器丢包分析--iptables规则以及MTU大小设置错误 容器利用 Linux 内核提供的命名空间技术,将不同应用程序的运行隔离起来,并用统一的 镜像,来管理应用程序的依赖环境。这为应用程序的管理和维护,带来了极大的便捷…