程序及源码下载地址:
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
-- 覆盖前是否备份源图片, 添加该参数则表示备份。
注意:如果配置了命令行参数则以命令行参数为准,否则读取助手工具配置文件中对应参数配置